Запрос IPhone-XPath не получит мой узел

Я использую GData в качестве парсера XML. Я пытался использовать запрос XPath для получения узла - @"//GetPlacesAutoCompleteResult". но getNodesForXPath не возвращает никаких узлов.

поэтому я спрашиваю, что не так с запросом, который я набрал?

PS Я только ищу способ узнать, существует ли узел или нет, меня не волнуют его дочерние узлы.

вот мой файл .xml (результат мыльного запроса к веб-службе .ASMX).

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <GetPlacesAutoCompleteResponse
         xmlns="http://xxxxxxx.com/xxxxxx/webservice">
            <GetPlacesAutoCompleteResult>
                <xs:schema id="NewDataSet"
                 xmlns=""
                 xmlns:xs="http://www.w3.org/2001/XMLSchema"
                 xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
                    <xs:element name="NewDataSet"
                                msdata:IsDataSet="true"
                                msdata:UseCurrentLocale="true">
                        <xs:complexType>
                            <xs:choice minOccurs="0"
                                       maxOccurs="unbounded">
                                <xs:element name="Table">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element name="ID"
                                                        type="xs:long"
                                                        minOccurs="0"/>
                                            <xs:element name="FullName"
                                                        type="xs:string"
                                                        minOccurs="0"/>
                                            <xs:element name="PlaceTypeID"
                                                        type="xs:int"
                                                        minOccurs="0"/>
                                        </xs:sequence>
                                    </xs:complexType></xs:element>
                            </xs:choice>
                        </xs:complexType></xs:element>
                </xs:schema>
                <diffgr:diffgram
                 xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
                 xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
                    <NewDataSet xmlns="">
                        <Table diffgr:id="Table1" msdata:rowOrder="0">
                            <ID>47393</ID>
                            <FullName>Yifat</FullName>
                            <PlaceTypeID>10</PlaceTypeID>
                        </Table>
                        <Table diffgr:id="Table2" msdata:rowOrder="1">
                            <ID>48497</ID>
                            <FullName>Haifa</FullName>
                            <PlaceTypeID>10</PlaceTypeID>
                        </Table>
                        <Table diffgr:id="Table3" msdata:rowOrder="2">
                            <ID>70827</ID>
                            <FullName
                             >Haifa - Central Bus Rishon</FullName>
                            <PlaceTypeID>120</PlaceTypeID>
                        </Table>
                    </NewDataSet>
                </diffgr:diffgram>
            </GetPlacesAutoCompleteResult>
        </GetPlacesAutoCompleteResponse>
    </soap:Body>
</soap:Envelope>

person Alon Amir    schedule 28.03.2011    source источник
comment
Один из многих дубликатов этого FAQ: ошибка libxml2 с пространствами имен и xpath   -  person    schedule 28.03.2011
comment
Вы всегда можете попробовать получить к нему доступ следующим образом: [Document nodesForXPath:@"//*[name()='GetPlacesAutoCompleteResult']" error:&error];   -  person sudo rm -rf    schedule 28.03.2011


Ответы (1)


Что ж, с <GetPlacesAutoCompleteResponse xmlns="http://xxxxxxx.com/xxxxxx/webservice"><GetPlacesAutoCompleteResult> у вас есть объявление пространства имен по умолчанию в области действия, поэтому, предполагая, что вы используете XPath 1.0, вам нужно привязать префикс к URI пространства имен http://xxxxxxx.com/xxxxxx/webservice и использовать этот префикс для уточнения имен элементов. Например, если префикс ws, вы должны использовать //ws:GetPlacesAutoCompleteResult.

Способ привязки префикса к URI пространства имен зависит от используемого вами API XPath. Я не знаком с GData, поэтому не могу помочь вам с примером кода.

person Martin Honnen    schedule 28.03.2011