gpt4 book ai didi

c# - 如何使用 c# 从 xml 获取节点-我做错了什么?

转载 作者:数据小太阳 更新时间:2023-10-29 02:16:10 24 4
gpt4 key购买 nike

命名空间和 XML 仍然让我感到困惑。

这是我的 XML(来自 SOAP 请求)

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<MyResponse xmlns="http://tempuri.org/">
<OutputXML xmlns="http://tempuri.org/XMLSchema.xsd">
<Result>
<OutputXML>
<Result>
<Foo>
<Bar />
</Foo>
</Result>
</OutputXML>
</Result>
</OutputXML>
</MyResponse>
</soap:Body>
</soap:Envelope>

我试图从 SOAP 响应中提取实际的 XML 部分(从 Foo 元素开始):

var nsmgr = new XmlNamespaceManager(document.NameTable);
nsmgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
nsmgr.AddNamespace("", "http://tempuri.org/");
nsmgr.AddNamespace("", "http://tempuri.org/XMLSchema.xsd");

var xml = document.DocumentElement
.SelectSingleNode("Foo", nsmgr)
.InnerXml;

但是 SelectSingleNode 返回 null。我已经尝试了一些不同的变体,但无法使任何工作正常进行。我有什么不明白的?

最佳答案

试试这个:

var nsmgr = new XmlNamespaceManager(document.NameTable);
nsmgr.AddNamespace("aaa", "http://tempuri.org/XMLSchema.xsd");

var xml = document.DocumentElement
.SelectSingleNode("aaa:Foo", nsmgr)
.InnerXml;

这是因为 Default namespaces 没有前缀。

您可以使用 GetElementsByTagName 直接使用命名空间 uri:

var xml = document.GetElementsByTagName("Foo", 
"http://tempuri.org/XMLSchema.xsd")[0].InnerXml;

关于c# - 如何使用 c# 从 xml 获取节点-我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11752735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com