为什么这个xPath(c#)不起作用?

时间:2010-11-30 09:17:04

标签: c# xml xpath

得到这个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:

videoToAdd.Title = doc.SelectSingleNode(@"/video/title").InnerXml;

我得到一个'对象引用未设置为对象的实例'。任何想法为什么这是一个有效的xpath从我可以看到它曾经工作...

5 个答案:

答案 0 :(得分:6)

您的XML包含命名空间规范,您需要修改源代码以将其考虑在内 例如:

XmlDocument doc = new XmlDocument();
doc.Load("doc.xml");
XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(doc.NameTable);
xmlnsManager.AddNamespace("ns", "UploadXSD");

videoToAdd.Title = doc.SelectSingleNode(@"/ns:video/ns:title", xmlnsManager).InnerXml;

答案 1 :(得分:1)

/video/title将从没有名称空间的title元素中返回没有名称空间的video元素。

您需要从xml中删除xmlns="UploadXSD",或在C#中设置适当的选择命名空间

答案 2 :(得分:1)

xmlns="UploadXSD"属性让你感到悲伤。我认为您需要使用XmlNamespaceManager来帮助解析器解析名称,或者如果您不需要,则删除xmlns属性。

答案 3 :(得分:0)

doc变量是否可能指向<video>元素?在这种情况下,您需要编写

videoToAdd.Title = doc.SelectSingleNode(@"./title").InnerXml;

videoToAdd.Title = doc.SelectSingleNode(@"//video/title").InnerXml;

答案 4 :(得分:0)

试试这个:

videoToAdd.Title = doc.SelectSingleNode(@"//xmlns:video/xmlns:title").InnerXml;

您的XML文档具有XML命名空间,并且要查找必须在其前面添加xmlns:的元素。

相关问题