【问题标题】:Extracting nested nodes from xml file c#从xml文件c#中提取嵌套节点
【发布时间】:2018-11-27 14:29:47
【问题描述】:

我有这个 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"] 是空的。

有什么想法吗?

【问题讨论】:

    标签: c# xml xml-parsing


    【解决方案1】:

    首先,您的 XML 无效。你需要在那里有一个&lt;/table&gt;

    //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 更具可读性。

    【讨论】:

    • 这行得通,谢谢。我使用的 xml 文档是有效的。我已经发布了其中的一小部分。
    【解决方案2】:

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

    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)
            {
    
            }
        }
    }
    

    【讨论】:

    • 您是否有一个有效的 xml,因为您在发布的 xml 中缺少 。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多