2010-11-30 2 views
0

Получил этот XML:Почему этот xPath (C#) не работает?

<?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

Можете ли вы показать документ инициализирующий заявление? – 2010-11-30 09:19:15

+3

`videoToAdd` или` doc` также может быть `null` в соответствии с этой ошибкой. Вы проверили, что проблема xpath является проблемой? – tenfour 2010-11-30 09:20:34

+1

Используйте отладчик, чтобы определить, имеет ли значение videoToAdd или doc значение null. – leppie 2010-11-30 09:22:41

ответ

1

/video/title вернул бы элемент title без пространства имен из элемента video без пространства имен.

Вам нужно либо удалить xmlns="UploadXSD" из вашего XML, или установить соответствующее пространство имен выбора в вашей C#

0

Возможно ли, что doc переменная указывает на <video> элемент? В этом случае вам нужно будет написать либо

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

или

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

Попробуйте это:

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

Ваш XML документ имеет пространства имен XML и найти элементы, которые вы должны PREfix их с xmlns:.

1

Это атрибут xmlns="UploadXSD", который вызывает у вас горе. Я думаю, вам нужно использовать XmlNamespaceManager, чтобы помочь парсеру разрешить имена или удалить атрибут xmlns, если он вам не нужен.

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; 
Смежные вопросы