使用 foreach 获取 XML 节点的值

Posted

技术标签:

【中文标题】使用 foreach 获取 XML 节点的值【英文标题】:Get values of XML nodes with foreach 【发布时间】:2018-01-05 15:02:10 【问题描述】:

我正在使用 C# 和 XML 文件编写程序。我想读取 xml-nodes 的值,但我遇到了问题。在我试图获取内容的第二部分中,它只执行一个循环而不是三个循环。第一个值是正确的。我不知道为什么它只进行第一个循环。我希望有人可以帮助我。

我的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<lagerverwaltung>
  <article>
    <inventory id="1">
    </inventory>
    <orders>
      <order id="1">
        <id>1</id>
        <idposition>1</idposition>
        <content>
          <idarticle amount="4">2</idarticle>
          <idarticle amount="3">3</idarticle>
          <idarticle amount="2">1</idarticle>
        </content>
        <idcustomer>2</idcustomer>
        <orderdate>05.01.2018 15:10:44</orderdate>
        <paydate>05.02.2018</paydate>
        <mwst>7.7</mwst>
        <total>1781.358</total>
      </order>
    </orders>
  </article>
</lagerverwaltung>

我的 C#-代码:

List<Order> orderList = new List<Order>();
XmlDocument xml = new XmlDocument();
xml.Load(xmlFilePath);
XmlNodeList xnList = xml.SelectNodes("/lagerverwaltung/article/orders/order");
foreach (XmlNode xn in xnList)

    // Is working
    string id = xn["id"].InnerText;
    string bestellPositionId = xn["idposition"].InnerText;
    string kundeId = xn["idcustomer"].InnerText;
    string bestelldatum = xn["orderdate"].InnerText;
    string rechnungsDatum = xn["paydate"].InnerText;
    string mwst = xn["mwst"].InnerText;
    string rechnungsTotal = xn["total"].InnerText;


    XmlNodeList xnInhalt = xml.SelectNodes("/lagerverwaltung/article/orders/order[@id='" + id + "']/content");
    Dictionary<string, string> content= new Dictionary<string, string>();
    foreach (XmlNode xmlNode in xnInhalt) // Does only one loop
    
        string articleid = xmlNode["idarticle"].InnerText;
        string amount = xmlNode["idarticle"].GetAttribute("amount");
        content.Add(articleid, amount);
    

【问题讨论】:

【参考方案1】:

有一个content节点,使用content/idarticle获取内部集合:

XmlNodeList xnInhalt = xml.SelectNodes("/lagerverwaltung/article/orders/order[@id='" + id 
+ "']/content/idarticle");

然后您将修改以下代码,因为 xmlNode 现在引用 idarticle。例如,

string articleid = xmlNode.InnerText;

【讨论】:

我在第一行得到一个 System.NullReferenceException,我正在阅读 idarticle 我在回答中添加了一些内容。

以上是关于使用 foreach 获取 XML 节点的值的主要内容,如果未能解决你的问题,请参考以下文章

JS获取XML节点值

使用 SQL 获取 XML 节点中的值

SwiftUI 在 For Each 中获取下一个循环的值

我有一个for循环,把数据放到数组里,怎么在for循环外面取到数组的值

使用 JAXB 获取 XML 子节点的值

获取选定节点的子计数