尝试解析此xml文件

<?xml version="1.0" encoding="UTF-8"?>
<feed gd:kind="shopping#products"
      gd:etag="&quot;pUAQLMOCjdnNh1LcpqK05ByVY7g/Gsdf7eFzzI3Z-HW0Z-XItKMrp8c&quot;"
      xmlns="http://www.w3.org/2005/Atom"
      xmlns:gd="http://schemas.google.com/g/2005"
      xmlns:s="http://www.google.com/shopping/api/schemas/2010">
    <entry gd:kind="shopping#product">
        <s:product>
            <s:googleId>11111</s:googleId>
            <s:author>
                <s:name>ebay.de</s:name>
                <s:accountId>11111</s:accountId>
            </s:author>
            <s:creationTime>2012-08-16T19:20:24.000Z</s:creationTime>
            <s:modificationTime>2013-03-01T17:50:54.000Z</s:modificationTime>
            <s:country>It</s:country>
            <s:language>de</s:language>
            <s:title>Blomus Rund-Magnete</s:title>
            <s:brand>Blomus</s:brand>
            <s:condition>new</s:condition>
            <s:mpns>
                <s:mpn>66742</s:mpn>
            </s:mpns>
            <s:inventories>
                <s:inventory channel="online" availability="inStock">
                    <s:price shipping="4.9" currency="EUR">4.2</s:price>
                </s:inventory>
            </s:inventories>
            <s:images>
            </s:images>
        </s:product>
    </entry>
</feed>


LINQ:

XNamespace s = "http://www.google.com/shopping/api/schemas/2010";

var q = from product in XMLDoc.Root.Elements("entry").Elements(s+"product")
        let inventory = product.Element(s + "inventories").Element(s + "inventory")
        let price = (decimal)inventory.Element(s + "price")
        let shipping = (decimal)inventory.Element(s +"price").Attribute("shipping")
        let totalprice = price + shipping
        select new
        {
            Name = (string)product.Element(s + "author").Element(s + "name"),
            Shipping = shipping,
            TotalPrice = totalprice,
            Price = price+shipping
        };


返回的q计数始终为0,这可能是什么问题?

最佳答案

您的entry缺少名称空间。我已经尝试将其替换为s:entry(并且将XMLDoc.Root.Elements("entry")替换为XMLDoc.Root.Elements(s + "entry")),并且您的查询工作正常。

问题是您已定义默认名称空间xmlns="http://www.w3.org/2005/Atom"。因此,您也必须将其用于没有前缀的元素,如下所示:

XNamespace def = "http://www.w3.org/2005/Atom";


然后xDoc.Root.Elements(def + "entry")

关于c# - Linq to XML没有得到任何元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15256746/

10-13 09:05