我正在尝试从xml文档的特定位置获取属性,xml看起来包含多个类似的标记名,如下所示:
<Message dataItemId="Axis_01" timestamp="2018-06-25T20:20:40.4374489Z"
name="[#] Numero inversioni" sequence="85988"
nativeCode="208573">208573</Message>
<Message dataItemId="Axis_02_InvDDone" timestamp="2018-06-
25T20:20:40.4374489Z" name="Error" sequence="85998"
nativeCode="208573">208573</Message>
如何仅检索名称为Error的Message的值?下面是我尝试的代码,其中textbox1 =消息,textbox2 =错误:
XmlDocument xmldoc = new XmlDocument();
XmlNodeList xmlnode;
try
{
xmldoc.Load("http://127.0.0.1:5000/cur");
XmlNode node2 = xmldoc.SelectSingleNode("'"+ textBox1.Text +
"'[name='" + textBox2.Text + "']");
listBox1.Items.Add(node2.ChildNodes.Item(0).InnerText.Trim());
}
答案 0 :(得分:1)
您的XPath有点不正确。为了进行测试,我对值进行了硬编码:
XmlNode messageNode = xmlDoc.SelectSingleNode("//Message[@name='Error']");
我认为您将能够轻松地将硬编码值替换为来自文本框的输入。
这将是在整个Xml文档中搜索一个Message
节点,该节点具有名为name
且值为Error
的属性。如果有多个匹配项,则SelectSingleNode
将返回第一个匹配项。如果需要,有一个SelectNodes
函数将返回多个值。
重要的位是:
\\Message
-指示XmlDocument查找Message
节点@name
-指示XmlDocument查找属性当我运行它时发现:
<消息dataItemId =“ Axis_02_InvDDone” timestamp =“ 2018-06-25T20:20:40.4374489Z” name =“ Error” sequence =“ 85998” nativeCode =“ 208573”> 208573
我不清楚您要检索哪个属性。这将检索dataItemId
属性的值
Debug.Print(messageNode.Attributes["dataItemId"].InnerText);
Axis_02_InvDDone
要获取该节点的Text值,即208573,请使用:
Debug.Print(messageNode.InnerText);
答案 1 :(得分:0)
下面是来自以下链接的代码:https://msdn.microsoft.com/en-us/library/system.xml.xmlnode.childnodes(v=vs.110).aspx
public class Sample {
public static void Main() {
XmlDocument doc = new XmlDocument();
doc.LoadXml("<book ISBN='1-861001-57-5'>" +
"<title>Pride And Prejudice</title>" +
"<price>19.95</price>" +
"</book>");
XmlNode root = doc.FirstChild;
//Display the contents of the child nodes.
if (root.HasChildNodes)
{
for (int i=0; i<root.ChildNodes.Count; i++)
{
Console.WriteLine(root.ChildNodes[i].InnerText);
}
}
}
}
您可以使用条件获取特定的子节点。