【问题标题】:Read xml node attribute读取xml节点属性
【发布时间】:2013-09-15 23:43:03
【问题描述】:

我有一个 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);
        }

【问题讨论】:

    标签: c# xml visual-studio-2012


    【解决方案1】:

    您应该在调用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 属性,则这不是必需的。

    【讨论】:

    • 您的方法可行,但问题是您从代码中加载 xml 结构而不是从文件中加载。
    • @Derezzed 没关系,您也可以从文件中加载它,只要文件格式正确且有效的 XML 应该可以正常工作。因为我不知道你的文件是怎样的,所以我做了我自己的例子来给你看。
    • 抱歉没有给出文件结构,文件是这样的,pastebin.com/raw.php?i=TjHYW5TP
    • @Derezzed 啊哈,那是因为您有一个命名空间,请参阅顶部代码的更新。
    • 它有效,但有些奇怪,它不是从“0” id 打印,它只是打印一些 id,但不是全部。无论如何,非常感谢你帮助我。
    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多