如何读取C#中具有相同节点名称的XML

时间:2015-11-17 20:49:04

标签: c# xml xml-parsing

我有一个类似的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<teryt>
<catalog name="TERC" type="all" date="2015-01-01">
<row>
<col name="WOJ">02</col>
<col name="POW"/>
<col name="GMI"/>
<col name="RODZ"/>
<col name="NAZWA">DOLNOŚLĄSKIE</col>
<col name="NAZDOD">województwo</col>
<col name="STAN_NA">2015-01-01</col>
</row>
...
</row>
</catalog>
</teryt>

我有一个有效的代码,但只读取每个行的第一个 col

System.Xml.XmlDocument rssDocument = new System.Xml.XmlDocument();
            rssDocument.Load("TERC.xml");

            System.Xml.XmlNodeList rssItems = rssDocument.SelectNodes("teryt/catalog/row");

            for (int i = 0; i < rssItems.Count; i++)
            {
                System.Xml.XmlNode rssNode;

                rssNode = rssItems.Item(i).SelectSingleNode("col");

                if (rssNode != null)
                {
                    Console.WriteLine(rssNode.InnerText);
                }
                else
                {
                    Console.WriteLine("");
                }
            } 

如果我想从所有中的每个 col 中读取InnerText,我该怎么办?

2 个答案:

答案 0 :(得分:1)

1 <<

我没有测试过这个。这是为了让您了解解决方案。您只是从每一行中选择一个col,因为SelectNodes(&#34; col&#34;)没有为您提供&#34; col&#34;内的节点。它为您提供名为&#34; col&#34;。

的节点

答案 1 :(得分:1)

更改

rssNode = rssItems.Item(i).SelectSingleNode("col");

XmlNodeList list = rssItems.Item(i).SelectNodes("col");

foreach(XmlNode node in list)
{
    Console.WriteLine(node .InnerText);
}

该方法的名称解释了正在做什么:SelectSingleNode。选择具有此名称的单个节点。您需要使用SelectNodes方法

选择所有节点