得到这个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从我可以看到它曾经工作...
答案 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:
的元素。