首页 > 解决方案 > 通过c#读取xml的多个子节点

问题描述

<Products>
 <Product>
      <Product_code>
           <![CDATA[ 9.077 ]]>
      </Product_code>
      <Price2>799.99</Price2>
                <variants>
                          <variant>
                                    <spec name="Renk">White</spec>
                                    <productCode>
                                              <![CDATA[ 9.0771933 ]]>
                                    </productCode>
                                    <picture>
                                              <![CDATA[ image/data/resimler/hakiki-deri-cz-saracli-topuklu-kadin-cizme-8316.jpg ]]>
                                    </picture>
                                    <picture>
                                              <![CDATA[ image/data/resimler/hakiki-deri-cz-saracli-topuklu-kadin-cizme-8314.jpg ]]>
                                    </picture>
                          </variant>
                          <variant>
                                    <spec name="Renk">Black</spec>
                                    <productCode>
                                              <![CDATA[ 9.0771734 ]]>
                                    </productCode>
                                    <picture>
                                              <![CDATA[ image/data/resimler/hakiki-deri-cz-saracli-topuklu-kadin-cizme-8316.jpg ]]>
                                    </picture>
                                    <picture>
                                              <![CDATA[ image/data/resimler/hakiki-deri-cz-saracli-topuklu-kadin-cizme-8314.jpg ]]>
                                    </picture>
                          </variant>
                </variants>
      </Product>
</Products>

这是我的 XML 示例:
它是关于带有Product CodeColorVariant CodePicture

我想先得到Product_codes 然后所有VariantsProduct_code

例如:


产品代码: 9.077

价格2: 799.99


伦克:白色

产品编号: 9.0771933

图片1:链接1

图2:链接2


伦克:黑色

产品编号: 9.0771734

图片1:链接1

图2:链接2

XmlDocument xmlDoc = new XmlDocument();
        XmlDocument xDoc = new XmlDocument();
        xmlDoc.Load("eticaret.xml");
        XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("/Products/Product");

        foreach (XmlNode tu in xmlDoc.SelectNodes("/Products/Product"))
        {
            MessageBox.Show("tu = " + tu.SelectSingleNode("Product_code").InnerText);
            foreach (XmlNode tuv in tu.SelectNodes("/Products/Product/variants/variant"))
            {

                MessageBox.Show("tuv = " + tuv.SelectSingleNode("productCode").InnerText + "   -   " + tuv.SelectSingleNode("spec[@name='Renk']").InnerText;
            }
        }

我用了这段代码

它确实有效,但是:第一个给出了第一部分的信息以下仅显示产品变体它不再显示第一个信息

标签: c#xmlxml-parsing

解决方案


这条线有问题:

foreach (XmlNode tuv in tu.SelectNodes("/Products/Product/variants/variant"))

它从所有产品中选择所有变体,而不仅仅是当前tu节点下的那些。将其更改为:

foreach (XmlNode tuv in tu.SelectNodes("variants/variant"))

这将选择相对于当前节点的tu节点。

要选择图片,可以使用以下代码:

foreach (XmlNode picture in tuv.SelectNodes("picture"))
{
    Console.WriteLine("  " + picture.InnerText);
}

推荐阅读