0

HTTParty 对看似相同的 XML 的 XML 解析完全让我感到困惑。我正在对 Web 服务进行相同的 GET 调用(获取函数参数),但对不同的资源(/channels/3/functions/58/ 与 /channels/6/functions/106/)进行了调用。我正在使用 HTTParty 拨打电话。问题是它以不同的方式解释结果,我在返回的 XML 中找不到任何可以解释差异的差异。

这是我第一次调用 /channels/3/functions/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>

但是,返回的散列会为“参数”(调试输出)返回一个空数组!

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调用中的参数在某些属性中有下划线???这似乎是一个不太可能的解释。任何帮助深表感谢。

4

1 回答 1

0

我认为这可能是 xml 命名空间的问题。第一个响应似乎有一个有效的type属性,而后者错过了xsd:string命名空间。

于 2012-03-18T19:19:11.127 回答