2010-08-18 4 views
1

Я тестирую функцию SelectSingleNode для извлечения одного узла из объекта XMLNode в Visual Studio следующим образом:SelectSingleNode ничего не возвращает

 Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xmlDoc.NameTable) 
     nsmgr.AddNamespace(ndListItems.Prefix, ndListItems.NamespaceURI) 
     Dim dummy As XmlNode = ndListItems.SelectSingleNode("/listitems", nsmgr) 

На данный момент, я просто пытаюсь получить корневой узел и Я использую свойство prefix и namespaceURI для добавления в XmlNamespaceManager. Проблема в том, что когда я запускаю отладчик, фиктивная переменная не назначается, т. Е. Она ничего. Просто к сведению, когда я анализирую значение свойства префикса и пространства имен они являются, префикс = «» и NamespaceURI = «http://schemas.microsoft.com/sharepoint/soap»

UPDATE:

Пытался изменить код, но мой манекен XMLNode все еще не получают набор

Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xmlDoc.NameTable) 
     nsmgr.AddNamespace(ndListItems.Prefix, ndListItems.NamespaceURI) 
     Dim dummy As XmlNode = ndListItems.SelectSingleNode("/" + ndListItems.Prefix + "listitems", nsmgr) 

Вот фрагмент кода XML, что я пытаюсь получить, моя конечная цель состоит в том, чтобы получить доступ к атрибутам г: ряд узлов

<listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
<rs:data ItemCount="1"> 
    <z:row ows_Title="Newhire" ows_FirstName="Rick" ows_WorkPhone="954" ows_HomePhone="954" ows_Email="[email protected].com" ows_UserID="Rick.Newhire" ows_MetaInfo="9;#" ows__ModerationStatus="0" ows__Level="1" ows_ID="9" ows_owshiddenversion="1" ows_UniqueId="9;#{0F6251A9-D3B8-4B07-A5F8-23BAF5F2237E}" ows_FSObjType="9;#0" ows_Created="2010-08-18 15:56:40" ows_FileRef="9;#Lists/NewHires/9_.000" /> 
</rs:data> 
</listitems> 
+1

Вы должны показать свой фрагмент XML и как создать «XmlDocument» – Strelok

+0

Хороший вопрос (+1). См. Мой ответ для объяснения проблемы и решения. –

ответ

0

У вас явно есть проблема с добавлением пространств имен в диспетчер пространства имен.

Кроме того, ваше выражение XPath в лучшем случае выбирает верхний элемент, однако вы хотите z:row.

Один простой и не слишком элегантный способ избежать обработки пространства имен является следующая

Использование:

SelectSingleNode("/*/*/*") 

или

SelectSingleNode("/*/*[local-name()='data']/*[local-name()='row']") 
+0

Эй, Димитрий, спасибо, что вернулись ко мне. Я пробовал приведенный выше фрагмент кода, но я все еще не получаю ничего в своей фиктивной переменной. Я отправил код выше и фрагмент XML, как предложил Стрелок – kingrichard2005

+0

@ kingrichard2005: я полностью переписал свое решение тому, которое не использует пространства имен вообще. Вы должны больше узнать о работе с пространствами имен, но этот вопрос не объясняется в одном вопросе. –

+0

По-прежнему не назначается. Я нашел статью о пространствах имен XML в MSDN, и я надеюсь, что это прояснит ситуацию.Не уверен, почему он все еще не назначен, я попробовал оба ваших решения. – kingrichard2005

0

В вашем входе образец QName кортеж для Элемент z:row («#RowsetSchema», «row», «z»). Это означает, что URI пространства имен для префикса z - #RowsetSchema.

Если я не ошибаюсь, ваш код на C#, этот ndListItems.Prefix оценивается в listitems префикс элемента, которого нет или "". Итак, когда вы говорите "/" + ndListItems.Prefix + "listitems", он получает оценку «/ listitems», которая будет интерпретироваться как listitems без пространства имен.

Так что, я думаю, что вам нужно:

Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xmlDoc.NameTable) 
nsmgr.AddNamespace("soap", "http://schemas.microsoft.com/sharepoint/soap/") 
nsmgr.AddNamespace("rs", "urn:schemas-microsoft-com:rowset") 
nsmgr.AddNamespace("z", "#RowsetSchema") 
Dim dummy As XmlNode = ndListItems.SelectSingleNode("/soap:listitems/rs:data/z:row", nsmgr) 

Edit: Он пришел ко мне, после того, как я отправил.

Смежные вопросы