2011-03-28 79 views
0

我正在使用GData作爲我的XML解析器。 我試過使用XPath查詢來檢索節點 - @「// GetPlacesAutoCompleteResult」。 但getNodesForXPath不返回任何節點。IPhone-XPath查詢不會檢索我的節點

所以我問,我輸入的查詢有什麼問題?

P.S 我只是在尋找一種方法來找出節點是否存在,我不在乎它是否是子節點。

這裏是我的.xml文件(從soap查詢到.ASMX Web服務的結果)。

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

這個FAQ的許多重複之一:[命名空間和xpath的libxml2錯誤](http://stackoverflow.com/questions/3135175/libxml2-error-with-namespaces-and-xpath) – 2011-03-28 15:48:17

+1

你總是可以嘗試訪問它像這樣:'[Document nodesForXPath:@「// * [name()='GetPlacesAutoCompleteResult']」error:&error];' – 2011-03-28 16:30:34

回答

2

好與<GetPlacesAutoCompleteResponse xmlns="http://xxxxxxx.com/xxxxxx/webservice"><GetPlacesAutoCompleteResult>你有一個默認命名空間聲明範圍如此假設你使用XPath 1.0你需要綁定的前綴命名空間URI http://xxxxxxx.com/xxxxxx/webservice和使用前綴來限定元素名稱。例如,如果前綴是ws,那麼您將使用//ws:GetPlacesAutoCompleteResult

如何將前綴綁定到名稱空間URI取決於您使用的XPath API,我不熟悉GData,因此我無法幫助您獲取代碼示例。