LINQ to XML Elements() 和 Descendants() 没有产生任何结果,即使元素确实存在
LINQ to XML Elements() and Descendants() yielded no results even the elements do exist
我正在尝试从 XML 中提取 ReturnRequest
元素,如下所示
var doc = XDocument.Parse(
@"<?xml version=""1.0"" encoding=""utf-8""?>
<RMAStateAcknowledgement xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://XX.ITTS.OA30/digitaldistribution/2012/05"">
<ReturnRequests>
<ReturnRequest>
<RMANumber>RMAXX_201910030001764685</RMANumber>
<StateChangeSuccess>True</StateChangeSuccess>
</ReturnRequest>
</ReturnRequests>
</RMAStateAcknowledgement>");
var ele = doc.Element("ReturnRequests"); // null
var ele2 = doc.Element("ReturnRequest"); // null
var ele3 = doc.Elements("ReturnRequests"); // Enumeration yielded no results
var ele4 = doc.Elements("ReturnRequest"); // Enumeration yielded no results
var ele5 = doc.Descendants("ReturnRequests"); // Enumeration yielded no results
var ele6 = doc.Descendants("ReturnRequest"); // Enumeration yielded no results
我认为这会非常简单,但在代码中,none 方法有效。
我是不是漏掉了一些很明显的东西?
还有几个案例
var ele7 = doc.Root.Elements("ReturnRequests"); // Enumeration yielded no results
var ele8 = doc.Root.Descendants("ReturnRequests"); // Enumeration yielded no results
var ele9 = doc.Root.Elements("ReturnRequest"); // Enumeration yielded no results
var ele10 = doc.Root.Descendants("ReturnRequest"); // Enumeration yielded no results
你有一个非标准的命名空间:
<RMAStateAcknowledgement ... xmlns="http://XX.ITTS.OA30/digitaldistribution/2012/05">
因此您的所有元素都位于该命名空间中,您需要在查询它们时使用它。
XNamespace ns = "http://XX.ITTS.OA30/digitaldistribution/2012/05";
var ele = doc.Descendants(ns + "ReturnRequests");
如果您想使用 .Element
(仅向下搜索一个级别),您需要查询文档的根元素(“RMAStateAcknowledgement”),而不是文档本身:
XNamespace ns = "http://XX.ITTS.OA30/digitaldistribution/2012/05";
var ele = doc.Root.Element(ns + "ReturnRequests");
我正在尝试从 XML 中提取 ReturnRequest
元素,如下所示
var doc = XDocument.Parse(
@"<?xml version=""1.0"" encoding=""utf-8""?>
<RMAStateAcknowledgement xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://XX.ITTS.OA30/digitaldistribution/2012/05"">
<ReturnRequests>
<ReturnRequest>
<RMANumber>RMAXX_201910030001764685</RMANumber>
<StateChangeSuccess>True</StateChangeSuccess>
</ReturnRequest>
</ReturnRequests>
</RMAStateAcknowledgement>");
var ele = doc.Element("ReturnRequests"); // null
var ele2 = doc.Element("ReturnRequest"); // null
var ele3 = doc.Elements("ReturnRequests"); // Enumeration yielded no results
var ele4 = doc.Elements("ReturnRequest"); // Enumeration yielded no results
var ele5 = doc.Descendants("ReturnRequests"); // Enumeration yielded no results
var ele6 = doc.Descendants("ReturnRequest"); // Enumeration yielded no results
我认为这会非常简单,但在代码中,none 方法有效。 我是不是漏掉了一些很明显的东西?
还有几个案例
var ele7 = doc.Root.Elements("ReturnRequests"); // Enumeration yielded no results
var ele8 = doc.Root.Descendants("ReturnRequests"); // Enumeration yielded no results
var ele9 = doc.Root.Elements("ReturnRequest"); // Enumeration yielded no results
var ele10 = doc.Root.Descendants("ReturnRequest"); // Enumeration yielded no results
你有一个非标准的命名空间:
<RMAStateAcknowledgement ... xmlns="http://XX.ITTS.OA30/digitaldistribution/2012/05">
因此您的所有元素都位于该命名空间中,您需要在查询它们时使用它。
XNamespace ns = "http://XX.ITTS.OA30/digitaldistribution/2012/05";
var ele = doc.Descendants(ns + "ReturnRequests");
如果您想使用 .Element
(仅向下搜索一个级别),您需要查询文档的根元素(“RMAStateAcknowledgement”),而不是文档本身:
XNamespace ns = "http://XX.ITTS.OA30/digitaldistribution/2012/05";
var ele = doc.Root.Element(ns + "ReturnRequests");