2013-11-22 25 views
-2

我通過AJAX調用從基於SOAP的Web服務接收以下XML。使用XPath在JavaScript中解析(基於SOAP)XML

<s:Envelope 
    xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <ActivityId 
      CorrelationId="d2ba6844-ec96-4ddc-a3aa-36c8bdd2daeb" 
      xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics"> 
      8c74da56-65c1-4f50-9dc6-547dc9b208a6 
      </ActivityId> 
     </s:Header> 
    <s:Body> 
     <MyResponse 
      xmlns="http://foo.example.com/"> 
      <MyResult 
       xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
       <Bar> 
        1ab6cd3a6499 
        </Bar> 
       </MyResult> 
      </MyResponse> 
     </s:Body> 
    </s:Envelope> 

我想使用XPath的(基於JavaScript的)客戶端解析XML找到Bar值。

我能用XPath在iOS上用KissXML解析這個XML。我首先將名爲baz的名稱空間添加到值爲"http://foo.example.com/"的根元素,然後我可以用類似"/s:Envelope/s:Body/baz:MyResponse/baz:MyResult/baz:Bar"的XPath表達式調用nodesForXPath:error:

儘管讀取MDN上的Introduction to using XPath in JavaScript,我無法弄清楚如何正確調用evaluate函數。

如何在JavaScript中解析此XML?

(我沒有任何外部庫的任何相關性,比如jQuery的,所以我想,如果我的解決方案並不需要我來添加任何圖書館喜歡。)

+0

那是什麼用加入了「巴茲」命名空間?您不必爲此創建名稱空間聲明。 –

+0

添加'baz'命名空間允許我在我的XPath語句中爲'MyResponse','MyResult'和'Bar'添加前綴,因爲它們都在MyResponse元素中聲明的默認名稱空間中。 – user2719740

回答

0

如果只有一個<Bar>元素,它可能是更容易的,而不是XPath的用戶.querySelector(),像

doc.querySelector('Bar') 
+0

可能沒有一個「酒吧」。我需要的'Bar'必須放在SOAP信封內的SOAP主體內部;沒有其他'酒吧'應該匹配。 – user2719740