Re: XPath не находит узлы, вроде как namespace мешает
От: v_ard  
Дата: 18.12.07 10:09
Оценка:
Здравствуйте, Mikolator, Вы писали:

M>XML файл.

M>
M><result xmlns="http://www.usasax.com/smsflatpostpaid/types">
M>    <packages>
M>        <item>
M>            <dealerCode>OM01A00010</dealerCode>
M>            <isDefault>false</isDefault>
M>            <packageCode>SMSOMNI</packageCode>
M>            <packageDesc>SMSFlatPostPaid Omnitel kryptis</packageDesc>
M>            <packageRestrictionCode>0</packageRestrictionCode>
M>        </item>
M>        <item>
M>            <dealerCode>OM01A00010</dealerCode>
M>            <isDefault>false</isDefault>
M>            <packageCode>SMSVISI</packageCode>
M>            <packageDesc>SMSFlatPostPaid visu tinklu kryptis</packageDesc>
M>            <packageRestrictionCode>0</packageRestrictionCode>
M>        </item>
M>    </packages>
M></result>
M>


M>Код. Создаём DOM объект и в него загружаем XML. Потом пытаюсь получить список элементов

M>
M>Dim dom0 As MSXML2.DOMDocument60
M>    Dim xmllist As MSXML2.IXMLDOMNodeList
    
M>    Set dom0 = New DOMDocument60
M>    dom0.setProperty "SelectionLanguage", "XPath"
M>    dom0.Load ("c:\out.xml")
M>    Set xmllist = dom0.getElementsByTagName("item")
M>

M>Проблема в том, что xmllist остаётся пустым. Но если в XML файле убрать атрибут xmlns, то все работает прекрасно. Что не так? Почему не работает с этим xmlns???

M>Так все ОК.


M>
M><result>
M>    <packages>
M>        <item>
M>            <dealerCode>OM01A00010</dealerCode>
M>            <isDefault>false</isDefault>
M>            <packageCode>SMSOMNI</packageCode>
M>            <packageDesc>SMSFlatPostPaid Omnitel kryptis</packageDesc>
M>            <packageRestrictionCode>0</packageRestrictionCode>
M>        </item>
M>        <item>
M>            <dealerCode>OM01A00010</dealerCode>
M>            <isDefault>false</isDefault>
M>            <packageCode>SMSVISI</packageCode>
M>            <packageDesc>SMSFlatPostPaid visu tinklu kryptis</packageDesc>
M>            <packageRestrictionCode>0</packageRestrictionCode>
M>        </item>
M>    </packages>
M></result>
M>


Читай доку. Надо делать XmlNamespaceManager, в котором указать твой нэймспейс обязательно с любым префиксом. А XPath писать с этим префиксом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.