gpt4 book ai didi

c# - SelectSingleNode 使用 XPath 为已知良好的 xml 节点路径返回 null

转载 作者:IT王子 更新时间:2023-10-29 03:58:19 26 4
gpt4 key购买 nike

考虑这个简单的 XML 文档。此处显示的序列化 XML 是来自复杂 POCO 对象的 XmlSerializer 的结果,我无法控制其架构。

<My_RootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="">
<id root="2.16.840.1.113883.3.51.1.1.1" extension="someIdentifier" xmlns="urn:hl7-org:v3" />
<creationTime xsi:nil="true" xmlns="urn:hl7-org:v3" />
</My_RootNode>

目标是提取id节点上扩展属性的值。在这种情况下,我们使用 SelectSingleNode 方法,并给出一个 XPath 表达式:

XmlNode idNode = myXmlDoc.SelectSingleNode("/My_RootNode/id");
//idNode is evaluated to null at this point in the debugger!
string msgID = idNode.Attributes.GetNamedItem("extension").Value;

问题是 SelectSingleNode 方法为给定的 XPath 表达式返回 null。

问题:关于此 XPath 查询的正确性或为什么此方法调用 + XPath 表达式会返回空值的任何想法?也许 namespace 是问题的一部分?

最佳答案

我强烈怀疑问题与命名空间有关。尝试摆脱命名空间,你会没事的——但显然这对你的真实情况没有帮助,我假设文档是固定的。

我不记得如何在 XPath 表达式中指定 namespace ,但我确信这就是问题所在。

编辑:好的,我现在想起来怎么做了。虽然这不是很令人愉快 - 您需要为其创建一个 XmlNamespaceManager。以下是一些适用于您的示例文档的示例代码:

using System;
using System.Xml;

public class Test
{
static void Main()
{
XmlDocument doc = new XmlDocument();
XmlNamespaceManager namespaces = new XmlNamespaceManager(doc.NameTable);
namespaces.AddNamespace("ns", "urn:hl7-org:v3");
doc.Load("test.xml");
XmlNode idNode = doc.SelectSingleNode("/My_RootNode/ns:id", namespaces);
string msgID = idNode.Attributes["extension"].Value;
Console.WriteLine(msgID);
}
}

关于c# - SelectSingleNode 使用 XPath 为已知良好的 xml 节点路径返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1089196/

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