我正在尝试在 Visual Studio 中使用 C# 从 XML 库(下面的文件)获取信息。
<buttons>
<measurement>
<scan id="0" time="20 53 06">
<q address="40" state="0"/>
<q address="41" state="0"/>
<q address="42" state="1"/>
<q address="43" state="0"/>
<q address="44" state="1"/>
<q address="45" state="1"/>
<q address="46" state="1"/>
<q address="47" state="1"/>
</scan>
</measurement>
<measurement>
<scan id="1" time="20 53 07">
<q address="40" state="0"/>
<q address="41" state="0"/>
<q address="42" state="0"/>
<q address="43" state="0"/>
<q address="44" state="1"/>
<q address="45" state="0"/>
<q address="46" state="0"/>
<q address="47" state="0"/>
</scan>
</measurement>
<measurement>
<scan id="2" time="20 53 08">
<q address="40" state="0"/>
<q address="41" state="1"/>
<q address="42" state="0"/>
<q address="43" state="1"/>
<q address="44" state="1"/>
<q address="45" state="0"/>
<q address="46" state="0"/>
<q address="47" state="1"/>
</scan>
</measurement>
<measurement>
<scan id="3" time="20 53 09">
<q address="40" state="1"/>
<q address="41" state="0"/>
<q address="42" state="0"/>
<q address="43" state="1"/>
<q address="44" state="1"/>
<q address="45" state="0"/>
<q address="46" state="1"/>
<q address="47" state="0"/>
</scan>
</measurement>
<measurement>
<scan id="4" time="20 53 10">
<q address="40" state="0"/>
<q address="41" state="0"/>
<q address="42" state="1"/>
<q address="43" state="1"/>
<q address="44" state="1"/>
<q address="45" state="1"/>
<q address="46" state="0"/>
<q address="47" state="0"/>
</scan>
</measurement>
<measurement>
<scan id="5" time="20 53 11">
<q address="40" state="1"/>
<q address="41" state="1"/>
<q address="42" state="1"/>
<q address="43" state="0"/>
<q address="44" state="0"/>
<q address="45" state="0"/>
<q address="46" state="1"/>
<q address="47" state="0"/>
</scan>
</measurement>
<measurement>
<scan id="6" time="20 53 12">
<q address="40" state="0"/>
<q address="41" state="1"/>
<q address="42" state="1"/>
<q address="43" state="0"/>
<q address="44" state="0"/>
<q address="45" state="1"/>
<q address="46" state="1"/>
<q address="47" state="1"/>
</scan>
</measurement>
<measurement>
<scan id="7" time="20 53 13">
<q address="40" state="1"/>
<q address="41" state="1"/>
<q address="42" state="1"/>
<q address="43" state="1"/>
<q address="44" state="1"/>
<q address="45" state="0"/>
<q address="46" state="1"/>
<q address="47" state="1"/>
</scan>
</measurement>
这是我第一次尝试读取 xml 文件。
这就是我想做的:
我想输入 ID,程序应该返回数组中的所有 q 状态。
这是我尝试过的:
using System.Xml;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("Path to my xml");
XmlNodeList titleNodes = xmlDoc.SelectNodes("//buttons/measurment/scan/q");
foreach(XmlNode titleNode in titleNodes)
Console.WriteLine(titleNode.Attribute["address"]);
Console.ReadKey();
我知道这段代码只会在控制台中显示一些 q 属性。我从来没有走得更远,因为它不起作用(控制台窗口中没有出现任何内容)。我不知道为什么。我只是不明白这个XmlRead,XmlDeocument。我在这里学习:Tutorial 。我关注着每一个词干和例子。只有 XmlRead 给了我一些东西。但它只读取所有内容,而不读取特定区域。
您能给我一些示例或解决方案吗?
最佳答案
考虑使用 XDocument
,它允许您使用 LINQ,使您的 xml 生活更轻松:
string myId = "2";
var doc = XDocument.Parse(xmlString); //or XDocument.Load(filePath)
//find the correct 'scan' node based on your id
var scan = doc.Descendants("scan")
.FirstOrDefault(s => s.Attribute("id").Value == myId);
//grab all q's and get their 'state' for that 'scan' node
var states = scan?.Descendants("q")
.Select(q => q.Attribute("state").Value);
foreach (var state in states)
{
Console.WriteLine(state);
}
关于c# - 读取多个 XML 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39101680/