当前位置: 首页 > 知识库问答 >
问题:

如何让Camel将Saxon用于xpath选择谓词?

章烨烨
2023-03-14

在我用Talend 6.5构建的路由中,使用了Saxon 9.5 jar,因此所有XPath谓词都使用Saxon进行评估。

升级到Talend 7.1以使用较新的Camel版本后,现在使用的是saxon 9.8版本,我从中了解到(带有saxon的Apache Camel Xpath 2.0在RouteBuilder/Predicates中似乎不起作用),9.6不会自动使用。

理想情况下,我希望Camel中的所有xslt/xpath计算都使用Saxon,虽然我可以对xslt组件使用Saxon=true修饰符,但我不知道如何将其与选择谓词一起使用。

我有个类似

from("direct:start")
...
.choice()
.when()
.xpath("myXpath2String")
...
.endChoice()
...

我尝试在xpath(...)子句之后添加. saxon(),但这不起作用。

当然有办法做到这一点,但我试过的都不管用。

有人能建议一种合适的方法来强制使用Saxon谓词吗?谢谢

共有1个答案

史弘致
2023-03-14

我已经找到了解决这个问题的方法——虽然有点难看,但它确实有效。

通过阅读Camel BuilderSupport和Expression的Javadoc,可以看出。saxon()修饰符不适用于表达式。xpath,因为它不返回XpathBuilder对象。然而,正如。when()可以将表达式本身作为参数,使用xpath()的BuilderSupport形式返回XPathBuilder对象,从而支持。saxon()修饰符。

但是,Talend似乎不允许您向提供参数。当函数时,但仅在之后应用表达式限定符。

为了解决这个问题,我有以下结构:

“Criteria”链接的条件设置为“false”的常量表达式。后面是一个cJavaDSLProcess组件,其形式代码为:

.when(xpath("myXPath2Expression").saxon())

这是有效的,尽管在结果. select()中有一个未使用的标准,这当然是糟糕的风格。

 类似资料:
  • 谓词是指用方括号写的XPath表达式。 它指的是为某些条件限制节点集中的选定节点。 例如, 序号 序号 描述 1 选择第一个元素,它是元素的子元素。 2 选择最后一个元素,它是元素的子元素。 3 使用选择元素。 4 选择大于的元素。 示例 此示例通过迭代每个学生创建一个包含其详细信息的元素。 它计算节点的位置,然后打印学生的详细信息以及序列号。 文件:students.xml - 文件:stude

  • 如果我有 如果我想选择包含td的a,我该怎么做? 我测试过: 但是我要获得td节点,我要获得a节点。如何使用XPath实现这一点?

  • 问题内容: 如何将多个谓词应用于一个 方法? 这就是我现在要做的,但是我真的不喜欢它。我有一个东西,我需要根据过滤器(谓词)减少东西的数量: 我知道,如果我预先知道过滤器的数量,则可以执行以下操作: 但是如何在不混合编程样式的情况下应用未知数量的谓词?众所周知,它看起来有点丑陋。 问题答案: 我假设您的类型不同于,这意味着需要对其进行调整。一种可行的方法如下: 这会为每个谓词评估重新创建过滤器流带

  • 问题内容: 我有一个GWT应用程序,正在尝试使用Selenium编写一些测试。 我正在使用XPath来标识测试页面上的元素。使用将无效,因为这些值是由GWT自动生成的,并且可以更改。当我意识到我可以按其标签找到按钮时,事情进展顺利,如下所示: 但是,当我开始运行多个测试时,我开始遇到问题。我意识到问题是,一旦Javascript生成的GWT应用程序的所有不同“页面”都保留在HTML中的隐藏元素中。

  • 问题内容: 我想创建一个Selenium测试,以使用AOL邮件测试我们的扩展。我设法登录到AOL并撰写了电子邮件,但是我还需要在iframe中的编辑器中选择元素。我检查了一下,即使打开了编辑器,以下测试也失败了: 我得到了错误。如何通过Xpath(或通过Selenium以任何其他方式)选择iframe的主体和其他元素? 问题答案: 在切换到之前,您无法浏览。您的xPath 将不会起作用,因为代码位

  • 问题内容: 我只想自行选择一个名为.date的类 由于某种原因,我无法使它正常工作。如果有人知道我的代码出了什么问题,将不胜感激。 问题答案: 我想写这个问题的规范答案,因为上面的答案有问题。 我们的问题 该 CSS 选择器: 将选择具有 foo 类的任何元素。 您如何在XPath中做到这一点? 尽管XPath比CSS强大,但是 XPath没有CSS类选择器的本机等效项 。但是,有一个解决方案。