错误!有关我选择的XPath使用的任何建议吗?

时间:2016-02-22 14:33:46

标签: xml xpath apache-camel hci

我正在使用HANA Cloud Integration构建集成流程(iFlow)。但是,任何具有任何XML经验的人都可以帮助我。

我已经构建了一个非常简单的集成流程,可以与openweathermap API对话,提取“天气”数据,然后通过电子邮件发送特定的数据点。这是我正在使用的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构成的。最后一个更新字段也需要传递到集成中的下一个进程,并且可以以相同的方式提取。

我创建了两个标题属性,即名为currentConditionscurrentReport的字符串,这些属性指向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的节点失败; lineNumber:1; columnNumber:1; prolog中不允许使用内容,原因:javax.xml.xpath.XPathExpressionException:转换类javax.xml.transform.sax.SAXSource:org.xml.sax.SAXParseException的节点失败; lineNumber:1; columnNumber:1; prolog中不允许使用内容。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

你的XPath表达式没问题。您看到的错误的根本原因在于此嵌套异常:

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

您从openweathermap API中提取的数据似乎不是格式良好的XML。 如果REST-API发送错误响应,通常会发生这种情况。您应首先验证API请求是否成功返回并包含格式良好的XML。