从xml文件C#中提取嵌套节点

时间:2018-11-27 14:29:48

标签: c# xml xml-parsing

我有这个xml文件:

<table head="Film">
<row>
    <id>USD</id><jan>Jan</jan><feb>Feb</feb><mar>Mar</mar><apr>Apr</apr><maj>May</maj><jun>Jun</jun><jul>Jul</jul><aug>Aug</aug><sep>Sep</sep><okt>Oct</okt><nov>Nov</nov><dec>Dec</dec><sum>Year</sum>
</row>
<row>
    <id>2018</id><jan>7629</jan><feb>6433</feb><mar>5573</mar><apr>3676</apr><maj>2545</maj><jun>2542</jun><jul>266</jul><aug>276</aug><sep>2690</sep><okt>371</okt><nov>5446</nov><dec>754</dec><sum>52731</sum>
</row>

我正在尝试提取每个月的各个值。 我已经尝试过

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("model.xml"); 
XmlNodeList nodeList = xmlDoc.GetElementsByTagName("table");
foreach (XmlNode node in nodeList) // for each <testcase> node
{
    Console.WriteLine(node["row"].InnerText);
}

这是一个例外,因为node [“ row”]为空。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

首先,您的XML无效。您需要在其中放置一个</table>

//In this example GetXml() just returns your XML
var doc = XDocument.Parse(GetXml());
var rows = doc.Descendants("table").Elements("row").ToList();

foreach(var element in rows[1].Elements()){
    Console.WriteLine(element?.Value);
}

现在,这只是基于XML的基本示例。您可能希望它更强大。您会发现我正在用LINQ向您展示这一点,我觉得它比XmlDocument更易读。

答案 1 :(得分:0)

您需要遍历子节点以获得所需的结果,如下所示:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("model.xml");
XmlNodeList nodeList = xmlDoc.GetElementsByTagName("table");
foreach (XmlNode node in nodeList) // for each <testcase> node
{
    foreach (XmlNode row in node.ChildNodes)
    {
        foreach (XmlNode mon in row.ChildNodes)
        {

        }
    }
}