微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使元素确实存在,LINQ to XML Elements() 和 Descendants() 也没有产生任何结果

如何解决即使元素确实存在,LINQ to XML Elements() 和 Descendants() 也没有产生任何结果

我正在尝试从 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

我认为这会非常简单,但在代码中,没有一种方法有效。 我错过了什么很明显的东西吗?

更多案例

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");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。