簡體   English   中英

讀取xml節點屬性

[英]Read xml node attribute

我有一個像這樣的節點的xml文檔, <ITEM id="1" name="bleh"... />我想要做的是獲取文檔中存在的每個ITEM節點的所有id的屬性值。

那么,我該怎么做呢?

編輯:我嘗試過這種方式並沒有用:

XmlDocument Doc = new XmlDocument();
        Doc.Load("example.xml");
        XmlNodeList nodeList = Doc.SelectNodes("/ITEM");
        foreach (XmlNode node in nodeList)
        {
            string id = node.Attributes["id"].Value;
            Console.WriteLine(id);
        }

您應該在調用SelectSingleNode()時使用XmlNamespaceManager ,因為您的XML確實包含一個命名空間:

var doc = new XmlDocument();
doc.Load("example.xml");
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("anyname", "http://tempuri.org/zitem.xsd");
foreach (XmlNode node in doc.SelectNodes("//anyname:ITEM", ns))
{
    Console.WriteLine(node.Attributes["id"].Value);
}

這就是你沒有結果的原因。

我的代碼與你的代碼的不同之處在於我使用//所以不是從文檔的根開始,而是使用雙正斜杠//指示XPath求值程序查找XML文檔中的任何位置。

這是我的example.xml作為示例:

<root>
  <items>
    <ITEM id="1" name="bleh=" />
    <ITEM id="2" name="bleh=" />
    <ITEM id="3" name="bleh=" />
    <ITEM id="4" name="bleh=" />
    <ITEM id="5" name="bleh=" />
    <ITEM id="6" name="bleh=" />
    <ITEM id="7" name="bleh=" />
    <ITEM id="8" name="bleh=" />
  </items>
</root>

以下是我的閱讀方式:

var doc = new XmlDocument();
doc.Load("example.xml");
foreach (XmlNode node in doc.SelectNodes("//ITEM[@id]"))
{
    Console.WriteLine(node.Attributes["id"].Value);
}

使用單斜杠,上面的XPath將如下所示:

/root/items/ITEM

我也使用[@id]來確保ITEM元素具有ID屬性,但如果您知道它們都具有ID屬性,則不需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM