我在我的xml中使用命名空间(我需要将其用于xsd验证目的)。因此,我的xpath不再有效。
我有代码:
XmlDocument doc = new XmlDocument();
doc.Load(newXmlFilePath);
和XML:
<?xml version="1.0" encoding="UTF-8"?>
<video xmlns="UploadXSD">
<title>
A vid with Pete
</title>
<description>
Petes vid
</description>
<contributor>
Pete
</contributor>
<subject>
Cat 2
</subject>
</video>
但是我的xpath没有选择节点。我尝试使用:
设置命名空间doc.NamespaceUR = "x";
然而它只是一个获得的访问者。有什么想法吗?
答案 0 :(得分:2)
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
nsMgr.AddNamespace("vid", "UploadXSD");
请注意,您需要在查询中使用它。例如:
doc.SelectSingleNode("/vid:video/vid:subject", nsMgr);
否则SelectSingleNode
将不知道在该经理的背景下操作。
答案 1 :(得分:1)
查看此Microsoft如何:http://support.microsoft.com/kb/318545
答案 2 :(得分:0)
根据您最近的其他问题,我认为您正在尝试处理混合文档,其中一些文档位于特定命名空间中,而另一些则不存在 - 所以您希望与命名空间无关,对吧?
你可以做几件事。你可以使用hack to strip out the namespace - 但这总是让我觉得有点脆弱。还有其他方式来表达语义上相同的文档 - 例如整个事情可以在每个元素上使用命名空间前缀 - 而且这个技巧不起作用。
或者您可以编写与命名空间无关的XPath查询。例如。 "/*[local-name()='video']/*[local-name()='subject']"