C#读取数据表中的xml数据表
C# read xml datatable in datatable
我需要读取 xml 文件中数据表中的数据 table。例如我有这个 xml 设置:
<Devs>
<Dev_1>
<port>COM7</port>
<addrs>1, 2</addrs>
<SupplyVoltageMeasurement>
<addr>2</addr>
<channel>3</channel>
</SupplyVoltageMeasurement>
</Dev_1>
<Dev_2>
<port>COM6</port>
<addrs>3, 4</addrs>
<SupplyVoltageMeasurement>
<addr>4</addr>
<channel>3</channel>
</SupplyVoltageMeasurement>
</Dev_2>
<Common>
<BaudRate>38400</BaudRate>
<BufferSize>30</BufferSize>
<UpdatePeriod>50</UpdatePeriod>
<SupplyVoltageChannel>3</SupplyVoltageChannel>
</Common>
</Devs>
所以我可以将 Dev_1 读成 table,但我无法将 SupplyVoltageMeasurement
读成 table。那么如何读取datatable SupplyVoltageMeasurement
in datatable Dev_1
?
用 XElement
class 初始化 xml。之后真的好用
var xml = new XElement("xmlSTringAbove");
foreach ( var dev in xml.Elements().Where(e=>e.Name.StartsWith("Dev")) )
{
/// this line gives Dev_1, Dev_2 ...
var devName = dev.Name;
var addr = dev.Element("SupplyVoltageChannel").Element("addr").Value;
var channel = dev.Element("SupplyVoltageChannel").Element("channel").Value;
/// use addr, channel and devName as you like
}
XElement xmlDoc = XElement.Load("SO-Question.xml"); // initialize your .xml document to read from
foreach (var handle in xmlDoc.Elements().Where(e => e.Name.ToString().StartsWith("Dev"))) // traverse each node of the .xml doc, based on a match condition, here : every node that starts with "Dev"
{
// retrieve the value of every Element in the Node (mark the nestings)
var devName = handle.Name;
var port = handle.Element("port").Value;
var addrs = handle.Element("addrs").Value;
var addr = handle.Element("SupplyVoltageMeasurement").Element("addr").Value;
var channel = handle.Element("SupplyVoltageMeasurement").Element("channel").Value;
}
我需要读取 xml 文件中数据表中的数据 table。例如我有这个 xml 设置:
<Devs>
<Dev_1>
<port>COM7</port>
<addrs>1, 2</addrs>
<SupplyVoltageMeasurement>
<addr>2</addr>
<channel>3</channel>
</SupplyVoltageMeasurement>
</Dev_1>
<Dev_2>
<port>COM6</port>
<addrs>3, 4</addrs>
<SupplyVoltageMeasurement>
<addr>4</addr>
<channel>3</channel>
</SupplyVoltageMeasurement>
</Dev_2>
<Common>
<BaudRate>38400</BaudRate>
<BufferSize>30</BufferSize>
<UpdatePeriod>50</UpdatePeriod>
<SupplyVoltageChannel>3</SupplyVoltageChannel>
</Common>
</Devs>
所以我可以将 Dev_1 读成 table,但我无法将 SupplyVoltageMeasurement
读成 table。那么如何读取datatable SupplyVoltageMeasurement
in datatable Dev_1
?
用 XElement
class 初始化 xml。之后真的好用
var xml = new XElement("xmlSTringAbove");
foreach ( var dev in xml.Elements().Where(e=>e.Name.StartsWith("Dev")) )
{
/// this line gives Dev_1, Dev_2 ...
var devName = dev.Name;
var addr = dev.Element("SupplyVoltageChannel").Element("addr").Value;
var channel = dev.Element("SupplyVoltageChannel").Element("channel").Value;
/// use addr, channel and devName as you like
}
XElement xmlDoc = XElement.Load("SO-Question.xml"); // initialize your .xml document to read from
foreach (var handle in xmlDoc.Elements().Where(e => e.Name.ToString().StartsWith("Dev"))) // traverse each node of the .xml doc, based on a match condition, here : every node that starts with "Dev"
{
// retrieve the value of every Element in the Node (mark the nestings)
var devName = handle.Name;
var port = handle.Element("port").Value;
var addrs = handle.Element("addrs").Value;
var addr = handle.Element("SupplyVoltageMeasurement").Element("addr").Value;
var channel = handle.Element("SupplyVoltageMeasurement").Element("channel").Value;
}