如何在c#中设置名称空间URI?

时间:2010-11-30 09:36:54

标签: c# xml xpath xsd xml-namespaces

我在我的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"; 

然而它只是一个获得的访问者。有什么想法吗?

3 个答案:

答案 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']"