gpt4 book ai didi

c# - 使用 namespace 获取 XML 节点的最简单方法?

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

我有以下 XML:

<?xml version="1.0" encoding="UTF-8"?>
<createTransactionResponse xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<messages>
<resultCode>Ok</resultCode>
<message>
<code>I00001</code>
<text>Successful.</text>
</message>
</messages>
<transactionResponse>
<responseCode>1</responseCode>
<authCode>25C10X</authCode>
<messages>
<message>
<code>1</code>
<description>This transaction has been approved.</description>
</message>
</messages>
</transactionResponse>
</createTransactionResponse>

获得“成功”值的最简单方法是什么。从 createTransactionResponse->messages->message->text?

这是我的代码:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("anet", "AnetApi/xml/v1/schema/AnetApiSchema.xsd");
var myNodes = doc.SelectNodes("//anet:messages", nsmgr);

myNodes 返回 2 个节点。 node[0]的innerxml是:

<resultCode xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">Ok</resultCode><message xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
<code>I00001</code>
<text>Successful.</text>
</message>

节点[1]的innerxml是:

<message xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
<code>1</code>
<description>This transaction has been approved.</description>
</message>

我的问题是我不能再深入了。

//anet:messages/message 没有产生任何结果。//anet:createTransactionResponse/messages 不产生任何结果。

我只是想获取特定的元素值,例如“I00001”和“25C10X”。

我做错了什么?

最佳答案

命名空间绑定(bind)是继承的,所以这里的子元素与其父元素在同一个命名空间中。

您需要将缺少的命名空间前缀添加到您的查询中:

//anet:messages/anet:message/anet:text

也就是说,与 XML 相比,我通常更喜欢 LINQ,而不是 XPath:

XNamespace ns = "AnetApi/xml/v1/schema/AnetApiSchema.xsd";

var root = XElement.Parse(xml);

var text = (string) root.Elements(ns + "messages")
.Descendants(ns + "text")
.Single();

参见 this fiddle用于工作演示。

关于c# - 使用 namespace 获取 XML 节点的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49899775/

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