2012-03-18 32 views
0

我完全被HTTParty的XML解析看似完全相同的XML所迷惑。我正在對Web服務進行相同的GET調用(獲取函數參數),但對其他資源(/ channels/3/functions/58/vs/channels/6/functions/106 /)進行了相同的調用。我正在使用HTTParty來撥打電話。問題在於它以不同的方式解釋結果,並且我無法在返回的XML中找到任何可以解釋差異的差異。HTTParty XML解析問題

這裏是在我第一次調用發生在/渠道/ 3 /功能/ 58/

XML響應:

<functionsResult xmlns="http://www.w3.org/2005/Atom"> 
<function> 
    <id>58</id> 
    <name>API: movies</name> 
    <type>trigger</type> 
    <description></description> 
    <tags></tags> 
    <status>active</status> 
    <parameters> 
     <parameter name="movie_query" label="Movie Query" type="xsd:string" required="false" default=""/> 
     <parameter name="critics-pick" label="Critics Pick" type="xsd:string" required="false" default=""/> 
     <parameter name="thousand-best" label="Thousand Best" type="xsd:string" required="false" default=""/> 
     <parameter name="dvds" label="Dvds" type="xsd:string" required="false" default=""/> 
     <parameter name="reviewer" label="Reviewer" type="xsd:string" required="false" default=""/> 
     <parameter name="publication-date" label="Publication Date" type="xsd:date" required="false" default=""/> 
     <parameter name="opening-date" label="Opening Date" type="xsd:date"  required="false" default=""/> 
    </parameters> 
    <link rel="self" title="This Function" method="GET" type="application/xml" href="/channels/3/functions/58/"/> 
    <link rel="related" title="Function Channel" method="GET" type="application/xml" href="/channels/3/"/> 
</function> 
</functionsResult> 

是HTTParty給我回來是好的,看起來像這樣的哈希(調試輸出):

functionsResult: 
    function: 
    id: '58' 
    name: ! 'API: movies' 
    type: trigger 
    description: !!null 
    tags: !!null 
    status: active 
    parameters: 
     parameter: 
     - name: movie_query 
     label: Movie Query 
     type: xsd:string 
     required: 'false' 
     default: '' 
     - name: critics-pick 
     label: Critics Pick 
     type: xsd:string 
     required: 'false' 
     default: '' 
     - name: thousand-best 
     label: Thousand Best 
     type: xsd:string 
     required: 'false' 
     default: '' 
     - name: dvds 
     label: Dvds 
     type: xsd:string 
     required: 'false' 
     default: '' 
     - name: reviewer 
     label: Reviewer 
     type: xsd:string 
     required: 'false' 
     default: '' 
     - name: publication-date 
     label: Publication Date 
     type: xsd:date 
     required: 'false' 
     default: '' 
     - name: opening-date 
     label: Opening Date 
     type: xsd:date 
     required: 'false' 
     default: '' 
    link: 
    - rel: self 
     title: This Function 
     method: GET 
     type: application/xml 
     href: /channels/3/functions/58/ 
    - rel: related 
     title: Function Channel 
     method: GET 
     type: application/xml 
     href: /channels/3/ 

對於其它資源的XML是在其結構中幾乎相同:

<functionsResult xmlns="http://www.w3.org/2005/Atom"> 
<function> 
    <id>106</id> 
    <name>search</name> 
    <type>trigger</type> 
    <description/> 
    <tags/> 
    <status>active</status> 
    <parameters> 
     <parameter name="callback" label="Callback" type="string" required="false" default=""/> 
     <parameter name="geocode" label="Geocode" type="string" required="false" default=""/> 
     <parameter name="lang" label="Lang" type="string" required="false" default=""/> 
     <parameter name="locale" label="Locale" type="string" required="false" default=""/> 
     <parameter name="page" label="Page" type="string" required="false" default=""/> 
     <parameter name="result_type" label="Result Type" type="string" required="false" default=""/> 
     <parameter name="rpp" label="Rpp" type="string" required="false" default=""/> 
     <parameter name="show_user" label="Show User" type="string" required="false" default=""/> 
     <parameter name="until" label="Until" type="string" required="false" default=""/> 
     <parameter name="since_id" label="Since Id" type="string" required="false" default=""/> 
     <parameter name="include_entities" label="Include Entities" type="string" required="false" default=""/> 
    </parameters> 
    <link rel="self" title="This Function" method="GET" type="application/xml" href="/channels/6/functions/106/"/> 
    <link rel="related" title="Function Channel" method="GET" type="application/xml" href="/channels/6/"/> 
</function> 
</functionsResult> 

但是,返回的散列返回'Parameters'(調試輸出)的空數組!

functionsResult: 
    function: 
    id: '106' 
    name: ! 'search' 
    type: trigger 
    description: !!null 
    tags: !!null 
    status: active 
    parameters: 
     parameter: 
     - '' 
     - '' 
     - '' 
     - '' 
     - '' 
     - '' 
     - '' 
     - '' 
     - '' 
     - '' 
     - '' 
    link: 
    - rel: self 
     title: This Function 
     method: GET 
     type: application/xml 
     href: /channels/6/functions/106/ 
    - rel: related 
     title: Function Channel 
     method: GET 
     type: application/xml 
     href: /channels/6/ 

我能想到的唯一的事情是,在第二GET調用的參數有一些屬性下劃線???這似乎不太可能的解釋。任何幫助深表感謝。

+0

我認爲這可能是xml命名空間的問題。第一個響應似乎有一個有效的'type'屬性,而後者錯過了xsd命名空間。 – phoet 2012-03-18 10:54:33

+0

謝謝@phoet。我現在正在研究這個問題。 – Gobitron 2012-03-18 14:03:55

+0

是的,問題似乎確實是一個命名空間問題。我正在努力解決這個問題。 – Gobitron 2012-03-18 15:34:10

回答

0

我認爲這可能是xml命名空間的一個問題。第一個響應似乎具有有效的type屬性,而後者錯過了xsd:string命名空間。