首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c#中具有前缀读取问题的XML元素

c#中具有前缀读取问题的XML元素
EN

Stack Overflow用户
提问于 2021-03-23 14:51:34
回答 1查看 35关注 0票数 0

我需要获取一个特定的xml元素值。下面是我拥有的xml代码

代码语言:javascript
运行
复制
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hdr="http://www.example.com/hdr/">
<soapenv:Header>
<hdr:ERROR_CODE>0</hdr:ERROR_CODE>
<hdr:ERROR_DESC>Success</hdr:ERROR_DESC>
<hdr:ASYNCH_RESPONSE_INDICATOR>0</hdr:ASYNCH_RESPONSE_INDICATOR>
</soapenv:Header>
<soapenv:Body><CREATE_RESPONSE></CREATE_RESPONSE>
</soapenv:Body>
</soapenv:Envelope>

下面是我尝试过的方法

代码语言:javascript
运行
复制
var response = @"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:hdr='http://www.example.com/hdr/'>
                        <soapenv:Header>
<hdr:ERROR_CODE>0</hdr:ERROR_CODE>
<hdr:ERROR_DESC>Success</hdr:ERROR_DESC>
<hdr:ASYNCH_RESPONSE_INDICATOR>0</hdr:ASYNCH_RESPONSE_INDICATOR>
</soapenv:Header>
<soapenv:Body><CREATE_RETAILER_RESPONSE></CREATE_RETAILER_RESPONSE>
</soapenv:Body>
</soapenv:Envelope>";
        var responseXdoc = XDocument.Parse(response);
        var nsManager = new XmlNamespaceManager(new NameTable());
        nsManager.AddNamespace("hdr", "http://www.example.com/hdr");
        var statusElement = responseXdoc.XPathSelectElement("//hdr:ERROR_CODE", nsManager);
        
        Console.WriteLine(statusElement.Value);

它返回此错误

代码语言:javascript
运行
复制
[System.NullReferenceException: Object reference not set to an instance of an object.]
   at Program.Main() :line 26

这是dotnet fiddler url

问题可能是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-23 15:40:32

您可以使用Linq的FirstOrDefault选择元素

代码语言:javascript
运行
复制
var statusElement = responseXdoc.Descendants().FirstOrDefault(x => x.Name.LocalName == "ERROR_CODE");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66758493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档