[英]LINQ to XML - How to parse nested and complex xml using C#
I am working to parse xml. 我正在解析xml。 I have the following XML and want to extract BrowseNodeId and Name from BrowseNode enclosed in Children . 我有以下XML并希望从BrowseNode封闭在儿童中提取BrowseNodeId和名称。
<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 & Supplies</Name>
</BrowseNode>
<BrowseNode>
<BrowseNodeId>502394</BrowseNodeId>
<Name>Camera & Photo</Name>
</BrowseNode>
<BrowseNode>
<BrowseNodeId>2811119011</BrowseNodeId>
<Name>Cell Phones & Accessories</Name>
</BrowseNode>
<BrowseNode>
<BrowseNodeId>172574</BrowseNodeId>
<Name>Office Electronics</Name>
</BrowseNode>
<BrowseNode>
<BrowseNodeId>172623</BrowseNodeId>
<Name>Portable Audio & Video</Name>
</BrowseNode>
<BrowseNode>
<BrowseNodeId>524136</BrowseNodeId>
<Name>Security & Surveillance</Name>
</BrowseNode>
<BrowseNode>
<BrowseNodeId>16285901</BrowseNodeId>
<Name>Service & Replacement Plans</Name>
</BrowseNode>
<BrowseNode>
<BrowseNodeId>3248684011</BrowseNodeId>
<Name>Car & Vehicle Electronics</Name>
</BrowseNode>
<BrowseNode>
<BrowseNodeId>7926841011</BrowseNodeId>
<Name>Video Game Consoles & 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>
I have written the following code but it not works 我已经写了下面的代码,但是没有用
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
};
It returns empty enum. 它返回空的枚举。 Please help me. 请帮我。 Thanks 谢谢
You have a namespace, xmlns
, in your xml input. 在xml输入中有一个名称空间xmlns
。 So the name of your elements are not, for example BrowseNodes
, but xmlns + BrowseNodes
where, 因此,您的元素名称不是,例如BrowseNodes
,而是xmlns + BrowseNodes
,
xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"
That's why your query doesn't find the elements. 这就是为什么您的查询找不到元素。
You can use something like: 您可以使用类似:
var ns = xdoc.Root.GetDefaultNamespace();
var data = from e in xDocument.Descendants(ns + "BrowseNodes")
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.