我正在使用 Camel 并尝试根据 xml 文件设置一些 header 。问题是我需要设置 2 个 header ,它们组合成 xml 中的单个属性并用冒号“:”分隔。
这是 xml 行:
<Alarm AlarmID="CC4567:180" DeviceID="CC0000:10.254.0.146" TimeStamp="2016-01-31 18:51:29.488">
我需要将 AlarmID 的两部分分开。我知道我可以使用以下内容:
<camel:setHeader headerName="firstPart">
<xpath resultType="java.lang.String">substring(/ticket/alarmId,1,6)</xpath>
</camel:setHeader>
但问题是第一部分实际上并不限于 6 个字符。我已尝试以下操作,但收到错误:
substring(/ticket/alarmId, 1, indexOf(':')-1)
错误:
Camel.builder.xml.InvalidXPathExpression:无效的 xpath:子字符串(/ticket/alarmId,indexOf(':'))。原因:javax.xml.xpath.XPathExpressionException:net.sf.saxon.trans.XPathException:未知的系统函数indexOf()
所以我的问题是有没有另一种方法可以做到这一点,因为 Camel 似乎不支持indexOf()。我的目标是我可以有 2 个 header ,firstPart=CC4567 和 secondaryPart=180
最佳答案
看起来您正在使用 saxon 并且它不支持它不包含名为indexOf 的函数。您需要使用有效的 xPath 函数来完成您想要的任务。尝试使用 xPath 2.0 中的 tokenize() 函数,该函数应该允许您在“:”处分割字符串。
关于xml - 通过 Camel 的 xpath 中字符的索引获取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36801434/