Проблема HTTParty при разборе XML - PullRequest
0 голосов
/ 18 марта 2012

Я полностью сбит с толку разбором XMLarty, казалось бы, идентичного XML.Я выполняю тот же вызов GET (получить параметры функции) для веб-службы, но для другого ресурса (/ channel / 3 / functions / 58 / vs. / channel / 6 / functions / 106 /).Я использую HTTParty, чтобы сделать звонок.Проблема в том, что он интерпретирует результаты по-разному, и я не могу найти никаких различий в возвращаемом XML, которые бы объяснили разницу.

Вот что происходит в моем первом обращении к / channel / 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 имеют подчеркивание в некоторых атрибутах ???Это кажется маловероятным объяснением.Любая помощь очень ценится.

1 Ответ

0 голосов
/ 18 марта 2012

Я предполагаю, что это может быть проблема с пространствами имен xml.первый ответ, по-видимому, имеет действительный атрибут type, тогда как последний пропускает пространство имен xsd:string.

...