繁体   English   中英

获取xml节点C#的子属性

[英]Get child attributes of xml node c#

我试图从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>

如何只检索错误名称为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());

            }

您的XPath有点不正确。 为了进行测试,我对值进行了硬编码:

XmlNode messageNode = xmlDoc.SelectSingleNode("//Message[@name='Error']");

我认为您将能够轻松地将硬编码值替换为来自文本框的输入。

这将在整个Xml文档中搜索一个Message节点,该节点具有名为name且值为Error的属性。 如果存在多个匹配项,则SelectSingleNode将返回第一个匹配项。 如果需要,有一个SelectNodes函数将返回多个值。

重要的位是:

  1. \\\\Message Message-指示XmlDocument查找“ Message节点
  2. @name指示XmlDocument查找属性

当我运行它时发现:

<Message dataItemId =“ Axis_02_InvDDone” timestamp =“ 2018-06-25T20:20:40.4374489Z” name =“ Error” sequence =“ 85998” nativeCode =“ 208573”> 208573 </ Message>

我不清楚要检索哪个属性。 这将检索dataItemId属性的值

Debug.Print(messageNode.Attributes["dataItemId"].InnerText);

Axis_02_InvDDone

要获取该节点的Text值,即208573,请使用:

Debug.Print(messageNode.InnerText);

下面是来自以下链接的代码: https : //msdn.microsoft.com/zh-cn/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);
      }
    }
  }
}

您可以使用条件获取特定的子节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM