Ошибки! Любые предложения по поводу моего выбранного XPath?

Я использую HANA Cloud Integration для создания потока интеграции (iFlow). Однако любой, у кого есть опыт работы с XML, потенциально может мне помочь.

Я создал очень простой поток интеграции, который взаимодействует с API openweathermap, извлекает «погодные» данные, а затем отправляет по электронной почте определенные точки данных. Это XML, с которым я работаю ниже:

<current>
    <city id="5913490" name="Calgary">
        <coord lon="-114.09" lat="51.05"/>
        <country>CA</country>
        <sun rise="2016-02-22T14:34:54" set="2016-02-23T01:05:30"/>
    </city>
    <temperature value="262.098" min="262.098" max="262.098" unit="kelvin"/>
    <humidity value="79" unit="%"/>
    <pressure value="865.62" unit="hPa"/>
    <wind>
        <speed value="1.32" name="Calm"/>
        <gusts/>
        <direction value="262.002" code="W" name="West"/>
    </wind>
    <clouds value="0" name="clear sky"/>
    <visibility/>
    <precipitation mode="no"/>
    <weather number="800" value="clear sky" icon="01n"/>
    <lastupdate value="2016-02-22T14:12:31"/>
</current>

Для этого необходимо извлечь элемент weather в корневом элементе current и использовать поле value. Это формируется строкой XPath /current/weather/@value Последнее поле обновления также необходимо передать следующему процессу интеграции, и его можно извлечь таким же образом.

Я создал два свойства заголовка, которые представляют собой строки с именами currentConditions и currentReport, и они указывают на атрибуты XPath /current/weather/@value и /current/lastupdate/@value. В XPath @ относится к атрибуту, а не к элементу. Также не забудьте сделать эти значения заголовков, чтобы их можно было передавать во внешние вызовы службы. Если они являются свойствами, они не будут отправлены внешним процессам. Однако я получаю эту ошибку:

org.apache.camel.builder.xml.InvalidXPathExpression: недопустимый xpath: /current/weather/@value. Причина: javax.xml.xpath.XPathExpressionException: Ошибка преобразования узла класса javax.xml.transform.sax.SAXSource: org.xml.sax.SAXParseException; номер строки: 1; номер столбца: 1; Содержимое не разрешено в прологе. Причина: javax.xml.xpath.XPathExpressionException: сбой при преобразовании узла класса javax.xml.transform.sax.SAXSource: org.xml.sax.SAXParseException; номер строки: 1; номер столбца: 1; Содержание не доступно в прологе.

Какие-либо предложения?


person polucci    schedule 22.02.2016    source источник


Ответы (1)


Ваше выражение XPath в порядке. Основная причина ошибки, которую вы видите, заключается в этом вложенном исключении:

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.

Похоже, что данные, которые вы извлекаете из API openweathermap, не являются правильно сформированным XML. Это часто происходит, если REST-API отправляет ответ об ошибке. Сначала следует убедиться, что запрос API успешно возвращается и содержит правильно сформированный XML.

person wero    schedule 22.02.2016