为什么空命名空间不能与.NET System.Xml.XmlNamespaceManager一起使用?

时间:2014-12-02 14:34:05

标签: c# .net xml xpath namespaces

我有这个XML文档:

<?xml version="1.0" encoding="utf-8"?>
<document xmlns="file:///someurl/goes.here">
  <levelone>
    <leveltwo>
      <title>Test Title</title>
      <item>Item 1</item>
      <item>Item 2</item>
      <item>Item 3</item>
    </leveltwo>
  </levelone>
</document>

这段代码:

static void Main(string[] args)
{
    XmlDocument fileIn = new XmlDocument();
    fileIn.Load("XMLFile1.xml");
    XmlNamespaceManager nsm = new XmlNamespaceManager(fileIn.NameTable);
    nsm.AddNamespace(String.Empty, "file:///someurl/goes.here");
    XmlNode docElem = fileIn.DocumentElement;
    string title = docElem.SelectSingleNode("levelone/leveltwo/title", nsm).InnerText;
    Console.WriteLine("Title: " + title);
    Console.WriteLine("Items: " + docElem.SelectNodes("//item", nsm).Count);
    Environment.Exit(0);
}

如果我运行此操作,当我尝试获取我尝试为NullReferenceException选择的节点的InnerText时,我会收到title。但是,如果我将AddNamespace调用更改为nsm.AddNamespace("a", "file:///someurl/goes.here")并更新所有XPath以使用该a命名空间,那么它可以正常工作。

我的理解是XPath中没有前缀的元素引用空命名空间。 String.Empty is said to be for the empty namespace in MSDN's docs,我给NamespaceManager空命名空间的正确名称空间URI。然而它似乎没有工作,我发现自己不得不在管理器中创建一个虚拟命名空间,以使其正常工作,这真的很烦人。为什么我必须使用它或任何解决方法?

我不是在寻找一种方法来运行我的代码, 我知道上面提到的几种方法和详细的广泛接受的方法。我想知道为什么我对文档的理解导致代码损坏 - 例如这是微软的问题,还是我误解了什么?

0 个答案:

没有答案