LINQ to XML - 如何使用 C# 分析嵌套和复杂的 XML

本文关键字:XML 嵌套 复杂 to 何使用 LINQ | 更新日期: 2023-09-27 18:32:04

我正在努力解析xml。我有以下XML,并希望从包含在子项中的BrowseNode中提取BrowseNodeId和Name。

<BrowseNodeLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
<OperationRequest>
    <RequestId>c405a82f-1282-4c7b-af88-cbe9f30b8fd9</RequestId>
    <Arguments>
        <Argument Name="Operation" Value="BrowseNodeLookup"/>
        <Argument Name="Service" Value="AWSECommerceService"/>
        <Argument Name="Signature" Value="IXCswiotUNwNgo="/>
        <Argument Name="AssociateTag" Value="werd-20"/>
        <Argument Name="Version" Value="2011-08-01"/>
        <Argument Name="BrowseNodeId" Value="493964"/>
        <Argument Name="AWSAccessKeyId" Value="RV33OHQ"/>
        <Argument Name="Timestamp" Value="2014-11-25T09:12:26Z"/>
    </Arguments>
    <RequestProcessingTime>0.002923</RequestProcessingTime>
</OperationRequest>
<BrowseNodes>
    <Request>
        <IsValid>True</IsValid>
        <BrowseNodeLookupRequest>
            <BrowseNodeId>493964</BrowseNodeId>
        </BrowseNodeLookupRequest>
    </Request>
    <BrowseNode>
        <BrowseNodeId>493964</BrowseNodeId>
        <Name>Categories</Name>
        <IsCategoryRoot>1</IsCategoryRoot>
        <Children>
            <BrowseNode>
                <BrowseNodeId>281407</BrowseNodeId>
                <Name>Accessories &amp; Supplies</Name>
            </BrowseNode>
            <BrowseNode>
                <BrowseNodeId>502394</BrowseNodeId>
                <Name>Camera &amp; Photo</Name>
            </BrowseNode>
            <BrowseNode>
                <BrowseNodeId>2811119011</BrowseNodeId>
                <Name>Cell Phones &amp; Accessories</Name>
            </BrowseNode>
            <BrowseNode>
                <BrowseNodeId>172574</BrowseNodeId>
                <Name>Office Electronics</Name>
            </BrowseNode>
            <BrowseNode>
                <BrowseNodeId>172623</BrowseNodeId>
                <Name>Portable Audio &amp; Video</Name>
            </BrowseNode>
            <BrowseNode>
                <BrowseNodeId>524136</BrowseNodeId>
                <Name>Security &amp; Surveillance</Name>
            </BrowseNode>
            <BrowseNode>
                <BrowseNodeId>16285901</BrowseNodeId>
                <Name>Service &amp; Replacement Plans</Name>
            </BrowseNode>               
            <BrowseNode>
                <BrowseNodeId>3248684011</BrowseNodeId>
                <Name>Car &amp; Vehicle Electronics</Name>
            </BrowseNode>
            <BrowseNode>
                <BrowseNodeId>7926841011</BrowseNodeId>
                <Name>Video Game Consoles &amp; Accessories</Name>
            </BrowseNode>
            <BrowseNode>
                <BrowseNodeId>10048700011</BrowseNodeId>
                <Name>Wearable Technology</Name>
            </BrowseNode>
        </Children>
        <Ancestors>
            <BrowseNode>
                <BrowseNodeId>172282</BrowseNodeId>
                <Name>Electronics</Name>
            </BrowseNode>
        </Ancestors>
    </BrowseNode>
</BrowseNodes>

我写了以下代码,但它不起作用

var xDocument = XDocument.Parse(xmlString);
var data = from e in xDocument.Descendants("BrowseNodes")
                              .Descendants("BrowseNode")
                              .Descendants("Children")
                              .Descendants("BrowseNode")                       
           select new
           {
               browseNodeId = e.Element("BrowseNodeId").Value,
               browseNodeName = e.Element("Name").Value
           };

它返回空枚举。请帮助我。谢谢

LINQ to XML - 如何使用 C# 分析嵌套和复杂的 XML

在 xml 输入中有一个命名空间 xmlns 。所以你的元素的名称不是,例如 BrowseNodes ,而是xmlns + BrowseNodes在哪里,

xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"

这就是查询找不到元素的原因。

您可以使用以下内容:

var ns = xdoc.Root.GetDefaultNamespace();
var data = from e in xDocument.Descendants(ns + "BrowseNodes")
           ...
相关文章: