2014-11-25 74 views
0

我正在解析XML。 我有以下XML並想提取BrowseNodeId和名稱BrowseNode封閉在子女LINQ to XML - 如何解析嵌套和複雜的XML使用C#

<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 
      }; 

它返回的空枚舉。請幫幫我。 謝謝

+0

的空枚舉?你的意思是一個空的'IEnumerable'? – 2014-11-25 11:40:27

+0

對不起。它的IEnumerable,data var是空的。 – 2014-11-25 11:43:10

回答

2

在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") 
      ...