xml - 通过 Camel 的 xpath 中字符的索引获取子字符串

标签 xml xpath apache-camel saxon

我正在使用 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/

相关文章:

javascript - XML 中 child 的 child

iphone - 从 XML 文件解析的分段 UITableview(需要帮助构建 XML 文件)

java - MD5 作为 Apache Camel 中的幂等 key

java - 如何加密/解密blueprint.xml中的密码?

android - Styleable无法解析

c++ - 将表单数据直接插入到 PugiXML 文档中

java - 如何在 Java 中使用 XPath 获取属性值?

xpath - XPath:通过子节点的属性值获取节点

xml - xQuery 更改节点层次结构(从一个节点中删除子节点并将其作为兄弟节点返回)

memory-leaks - 使用带有 Windows 换行符 (CR LF) 的行时,Camel netty TCP 客户端中的内存泄漏