【发布时间】:2014-01-18 20:30:07
【问题描述】:
我正在用 C# 编写一段代码,它将接收 XML 并提取一些值。当我收到的 XML 具有默认命名空间时,我必须使用 XmlNamespaceManager。
XmlDocument requestXml = new XmlDocument();
requestXml.LoadXml(request);
XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(requestXml.NameTable);
xmlNamespaceManager.AddNamespace("ns0", requestXml.DocumentElement.NamespaceURI);
metadata.Identifier = requestXml.SelectSingleNode("//ns0:Identifier[1]", xmlNamespaceManager).InnerText;
但是当命名空间有一个前缀时,这段代码就会中断,但它在没有命名空间管理器的情况下也能工作。
XmlDocument requestXml = new XmlDocument();
requestXml.LoadXml(request);
metadata.Identifier = requestXml.SelectSingleNode("//Identifier[1]").InnerText;
我期望知道 xml 命名空间是否有前缀是否合理?如果没有,我如何构建更健壮的代码,而不关心命名空间是否有前缀?非常感谢任何帮助。
更新:
我的理解是这三个是一样的。
示例1:
<Node1 xmlns="myNamespace">
<Node2>
<Node3></Node3>
</Node2>
</Node1>
示例2:
<ns0:Node1 xmlns:ns0="myNamespace">
<Node2>
<Node3></Node3>
</Node2>
</ns0:Node1>
示例 3:
<ns0:Node1 xmlns:ns0="myNamespace">
<ns0:Node2>
<ns0:Node3></ns0:Node3>
</ns0:Node2>
</ns0:Node1>
与其问 C# 如何对待这些相同(我知道 C# 在默认命名空间方面存在问题),不如问我要执行哪些检查以确保涵盖所有场景。
【问题讨论】:
标签: c# xml xml-namespaces