使用XDocument迭代XML文档只返回1个后代

时间:2015-02-08 14:11:17

标签: c# xml linq c#-4.0 linq-to-xml

我正在努力学习XDocument课程。我有一个XML文档,其中包含“produkter”,然后是一长串子项(1000 +)。

但是,当我拨打xdoc.Descendants("produkter").Count()时,长度仅为1。

我的代码:

public void Transform()
        {
            var path = HttpContext.Current.Server.MapPath("~/Content/Feeds/produkter-partnerid13389-Bianco.dk.xml");

            XDocument xdoc = XDocument.Load(path);

            foreach (XElement xe in xdoc.Descendants("produkter"))
            {
                if (xe == null)
                {
                    continue;
                }

                var xer = xe.Element("produkt");

                var productId = xer.Element("produktid").Value;

                var biancoProd = getBiancoPoco(xer);

                // create
                var product = _productService.GetProductById(productId, supplierId);
                if (product == null)
                {
                    Product pr = new Product();
                    setProductByPoco(pr,biancoProd);
                    _productService.Create(pr);

                    Debug.WriteLine("Creating new product: {0}",pr.Guid);
                }
                // update
                else
                {
                    setProductByPoco(product, biancoProd);
                    _productService.Update(product);
                }
            }
        }

Feed内容:

<?xml version="1.0" encoding="iso-8859-1"?>
<produkter>

<produkt><forhandler>Bianco.dk</forhandler>
<kategorinavn>Til Hende - Sko - Ballerina|Til Hende - Sko - Flade sko</kategorinavn>
<produktnavn>Laced Up Shoe DJF15</produktnavn>
<produktid>532683</produktid>
<beskrivelse>Canvas sko med snørelukning og kraftig sål fra Bianco</beskrivelse>
<nypris>399.00</nypris>
<billedurl>http://www.bianco.dk/upload/images/product_image/main/13/130213.jpg</billedurl>
<vareurl>http://www.partner-ads.com/dk/klikbanner.php?bannerid=21309&amp;partnerid=13389&amp;htmlurl=http://www.bianco.dk/til-hende/sko/ballerina/laced-up-shoe-djf15/navy-blue/532683</vareurl>
</produkt>

<produkt><forhandler>Bianco.dk</forhandler>
<kategorinavn>Til Hende - Sko - Party|Til Hende - Sko - Stiletter|Til Hende - Sko - Pumps</kategorinavn>
<produktnavn>Nutopa Pump DJF15</produktnavn>
<produktid>532674</produktid>
<beskrivelse>Klassisk pump med medium hælhøjde og plateau fra Bianco</beskrivelse>
<nypris>449.00</nypris>
<billedurl>http://www.bianco.dk/upload/images/product_image/main/76/131376.jpg</billedurl>
<vareurl>http://www.partner-ads.com/dk/klikbanner.php?bannerid=21309&amp;partnerid=13389&amp;htmlurl=http://www.bianco.dk/til-hende/sko/party/nutopa-pump-djf15/nougat/532674</vareurl>
</produkt>

<produkt><forhandler>Bianco.dk</forhandler>
<kategorinavn>Til Hende - Sko - Party|Til Hende - Sko - Stiletter|Til Hende - Sko - Pumps</kategorinavn>
<produktnavn>Nutopa Pump DJF15</produktnavn>
<produktid>532674</produktid>
<beskrivelse>Klassisk pump med medium hælhøjde og plateau fra Bianco</beskrivelse>
<nypris>449.00</nypris>
<billedurl>http://www.bianco.dk/upload/images/product_image/main/82/131382.jpg</billedurl>
<vareurl>http://www.partner-ads.com/dk/klikbanner.php?bannerid=21309&amp;partnerid=13389&amp;htmlurl=http://www.bianco.dk/til-hende/sko/party/nutopa-pump-djf15/navy-blue/532674</vareurl>
</produkt>
<produkter>

知道我做错了什么吗?如何改进我的代码,以便找到所有孩子?

2 个答案:

答案 0 :(得分:1)

xdoc.Descendants("produkter")询问名为produkter的根的后代,其中只有一个,因此计数。

迭代所有<produkt>

foreach (XElement xe in xdoc.Descendants("produkt"))

或者迭代任何子元素

foreach (XElement xe in xdoc.Element("produkter").Elements())

答案 1 :(得分:0)

据我所知 - Descendants("produkter")将返回名为“produkter”的后代。 (不是后代 “produkter”。)