2011-04-18 28 views
1

我目前正在開發一個Chrome擴展,它調用一個web服務,發送給我一個SOAP XML消息。當我收到這條消息時,我必須導航它來解析它,但是我遇到了一些問題。如何導航通過JSON節點結構

的XML的結構是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 

<env:Envelope  xmlns:env="http://www.w3.org/2003/05/soap-envelope"  
      xmlns:ns1="/service.php?service=components" 

      xmlns:enc="http://www.w3.org/2003/05/soap-encoding" 

      xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 

      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 


<env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"> 

<ns1:getComponentsResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> 

<rpc:result>return</rpc:result> 

<return enc:itemType="enc:Struct" enc:arraySize="7" xsi:type="enc:Array"> 

<item xsi:type="enc:Struct"> 
     <m_type xsi:type="xsd:string">image</m_type> 
     <m_params enc:itemType="enc:Struct" enc:arraySize="4" xsi:type="enc:Array"> 
      <item xsi:type="enc:Struct"> 
       <m_name xsi:type="xsd:string">image</m_name> 
       <m_value xsi:type="xsd:string">9f00de47f9f07ec0c7389875e4739c2b.png</m_value> 
       <m_numType xsi:type="xsd:int">3</m_numType> 
      </item> 
      <item xsi:type="enc:Struct"> 
       <m_name xsi:type="xsd:string">weblink</m_name> 
       <m_value xsi:type="xsd:string">http://www.xxx.com</m_value> 
       <m_numType xsi:type="xsd:int">2</m_numType> 
      </item> 
      <item xsi:type="enc:Struct"> 
       <m_name xsi:type="xsd:string">redirect-type</m_name> 
       <m_value xsi:type="xsd:string">2</m_value> 
       <m_numType xsi:type="xsd:int">0</m_numType> 
      </item> 
      <item xsi:type="enc:Struct"> 
       <m_name xsi:type="xsd:string">is-logo</m_name> 
       <m_value xsi:type="xsd:string">1</m_value> 
       <m_numType xsi:type="xsd:int">0</m_numType> 
      </item> 
     </m_params> 
     <m_order xsi:type="xsd:int">0</m_order> 
     <m_childs enc:itemType="xsd:anyType" enc:arraySize="0" xsi:type="enc:Array"/> 
     <m_id xsi:type="xsd:int">119</m_id> 
     <m_name xsi:type="xsd:string">image_4d624ce18aeb3</m_name> 
    </item> 

的代碼是這樣的:

var json = $.xmlToJSON(xmlhttp.responseXML); 
alert(json.item[0].length); 

所以basicelly我需要導航設置到「項」,但事實並非如此作品,我不明白爲什麼...

回答

0

由於XML只有一個根標籤,當xmlToJSON插件解析,似乎它不是處理頂級<item/>作爲一個孩子,而是作爲對象本身的根源。

我想嘗試:

alert(json.m_name); 

...或者你感興趣的任何子元素

如果執行的是一個在http://www.terracoder.com/index.php/xml-objectifier/xml-objectifier-examples,你可以這樣做:。

alert(root._children.length); 

我會使用像http://phpjs.org/functions/var_export:578這樣的工具(或者通過使用for ... in來自己動手去反思這些對象,所以你可以親自看看它的組件是什麼。

UPDATE

我不知道使用jQuery與Chrome擴展任何東西,所以我的測試是與單機版。您可以嘗試首先驗證您的XML是否有效,然後從那裏開始。例如,這個工作如果包括從http://www.terracoder.com/scripts/saXMLUtils.js第一XMLObjectifier:

// XML truncated to be well-formed 
var xml = '<?xml version="1.0" encoding="UTF-8"?>\ 
    <item  xmlns:env="http://www.w3.org/2003/05/soap-envelope"\ 
     xmlns:ns1="/service.php?service=components" \ 
     xmlns:enc="http://www.w3.org/2003/05/soap-encoding" \ 
     xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" \ 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" \ 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\ 
     xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"\ 
     xsi:type="enc:Struct">\ 
    <m_type xsi:type="xsd:string">image</m_type>\ 
    <m_params enc:itemType="enc:Struct" enc:arraySize="4" xsi:type="enc:Array">\ 
     <item xsi:type="enc:Struct">\ 
      <m_name xsi:type="xsd:string">image</m_name>\ 
      <m_value xsi:type="xsd:string">9f00de47f9f07ec0c7389875e4739c2b.png</m_value>\ 
      <m_numType xsi:type="xsd:int">3</m_numType>\ 
     </item>\ 
     <item xsi:type="enc:Struct">\ 
      <m_name xsi:type="xsd:string">weblink</m_name>\ 
      <m_value xsi:type="xsd:string">http://www.xxx.com</m_value>\ 
      <m_numType xsi:type="xsd:int">2</m_numType>\ 
     </item>\ 
     <item xsi:type="enc:Struct">\ 
      <m_name xsi:type="xsd:string">redirect-type</m_name>\ 
      <m_value xsi:type="xsd:string">2</m_value>\ 
      <m_numType xsi:type="xsd:int">0</m_numType>\ 
     </item>\ 
     <item xsi:type="enc:Struct">\ 
      <m_name xsi:type="xsd:string">is-logo</m_name>\ 
      <m_value xsi:type="xsd:string">1</m_value>\ 
      <m_numType xsi:type="xsd:int">0</m_numType>\ 
     </item>\ 
    </m_params>\ 
    <m_order xsi:type="xsd:int">0</m_order>\ 
    <m_childs enc:itemType="xsd:anyType" enc:arraySize="0" xsi:type="enc:Array"/>\ 
    <m_id xsi:type="xsd:int">119</m_id>\ 
    <m_name xsi:type="xsd:string">image_4d624ce18aeb3</m_name>\ 
</item>'; 

    // DOMParser is only Firefox/Safari/Chrome/IE9+ but convenient for debugging: 
xml = new DOMParser().parseFromString(xml, 'text/xml'); 
var json = XMLObjectifier.xmlToJSON(xml); 
var str = ''; 
for (var i in json) { 
    str += i + '::' + json[i] + '\n'; 
} 
alert(str); 

你也可以試試這個在您的XML:

var xmlString = new XMLSerializer().serializeToString(xmlhttp.responseXML); 
alert(xmlString); 
+0

NOP它沒有工作......所有的時間說「undifined 「 來自terracoder的鏈接,是我來自的;) – Sindar 2011-04-18 11:37:52

+0

您確定XML是格式良好的。當XML格式良好時(上面的XML格式不正確),它適用於獨立版本。 – 2011-04-18 16:57:42

+0

如果您粘貼完整的XML,我們可以看看可能發生了什麼。您是否確認響應XML甚至是XML?如果XML存在問題,它可能是=== null。 – 2011-04-18 23:57:18