我正在使用Xpath解析XML文档。步骤节点具有步骤形式的属性。我正在尝试获取每个步骤的价值。例如0.03,0.025,0.05 ....但是使用我的代码,我只得到第一个值,即字符串列表中的0.03。这是我尝试过的代码:
private void btn_steps_Click(object sender, EventArgs e)
{
List<string> step = new List<string>();
XmlDocument doctst = new XmlDocument();
doctst.Load(@"C:\ehData\workData\mywork.xml");
XmlNodeList nodelistst = doctst.Selectnodes("//steps");
foreach (XmlNode node in nodelistst)
{
step.Add(node["step"].InnerText);
}
listBox2.DataSource = step;
}
此外,我正在附加要解析的XML文件图像。我在此守则中做错了什么?
以下是XML文件的几行
<devices orderNo="67354698">
<device serno="P1002001190">
<steps>
<step descriptor="160000556" element="1" usage="B">0.03</step>
<step descriptor="160000556" element="2" usage="B">0.025</step>
<step descriptor="160000556" element="3" usage="B">0.05</step>
答案 0 :(得分:1)
我不确定是要属性值还是要内部文本。 因此,我把所有东西都放在这里。
检索属性:
要从第一个descriptor
元素获取step
属性-您可以在XPath下面使用:
/devices/device/steps/step[1]/@descriptor
此XPath将返回-descriptor="160000556"
如果只需要值,则可以使用:
string(/devices/device/steps/step[1]/@descriptor)
这将仅返回值,即160000556
您可以申请元素或用法属性的相同策略。
检索内部文本:
要获取第二个step
元素的内部文本,可以在XPath下面使用:
/devices/device/steps/step[2]/text()
现在这些XPath可以循环运行并更改方括号内的索引以获取所有属性和元素。
希望这会有所帮助。
答案 1 :(得分:1)
1)通过将 XmlDocument.GetElementsByTagName()
与xml标签名配合使用
...
XmlNodeList nodelistst1 = doctst.GetElementsByTagName("step");
foreach (XmlNode node in nodelistst1)
{
step.Add(node.InnerText);
}
2)通过在XPath中使用 XmlDocument.SelectNodes()
...
XmlNodeList nodelistst = doctst.SelectNodes(".//devices/device/steps/step/text()");
foreach (XmlNode node in nodelistst)
{
step.Add(node.Value);
}
所以最后您从上述两个选项得到的结果都是
foreach (var item in step)
{
Console.WriteLine(item);
}
输出:(用于从OP提供的文本XML)