如何解析使用NamspaceManager在C#XML,XML是具有元素定义的命名空间平
问题描述:
我希望解析以下XML如何解析使用NamspaceManager在C#XML,XML是具有元素定义的命名空间平
写入<?xml version="1.0" encoding="UTF-8"?>
<product xmlns="http://products.org">
<make xmlns="http://camera.org">
<model>Camry</model>
</make>
<make xmlns="http://tv.org">
<model>Sony</model>
</make>
</product>
代码解析它
这是如何即时写入解析代码
但在最后im得到null inxmlNode对象。你能告诉还有什么可以做的吗?
答
您不能忽略XPath中的命名空间。*文档中的元素都具有非空白的命名空间URI。
您的问题标题显示您的方向正确:您需要使用XmlNamespaceManager将URI的前缀显式绑定到前缀,并在路径表达式中使用这些前缀。
这个程序对你的输入文档
using System;
using System.Xml;
public class XPathNamespace
{
public static void Main() {
XmlDocument doc = new XmlDocument();
doc.Load("test1.xml");
XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
xnm.AddNamespace("p", "http://products.org");
xnm.AddNamespace("c", "http://camera.org");
xnm.AddNamespace("t", "http://tv.org");
ShowNode(doc.SelectSingleNode("/p:product", xnm));
ShowNode(doc.SelectSingleNode("/p:product/c:make", xnm));
ShowNode(doc.SelectSingleNode("/p:product/t:make", xnm));
}
private static void ShowNode(XmlNode node) {
Console.WriteLine("<{0}> {1}",
node.LocalName,
node.NamespaceURI);
}
}
测试,它产生以下输出
<product> http://products.org
<make> http://camera.org
<make> http://tv.org
希望这有助于。
(*)这并不意味着您不能忽略XPath中的确切命名空间。例如,您可以匹配
/*[local-name()='product']
但是,这是一个解决办法,并说明你仍然不得不面对一个命名空间的存在在某种程度上或其他。
请提供pXMLElementPath, – harpo
的价值它是反刍/产品或/ make或 – Abhi
如果你是包括“/”,那么这就是问题所在。节点的名称是“产品”或“制造”。 –