2

我正在尝试从字符串文字做 xpath 表达式。我从一些变量创建我的 xpath,所以我无法预先计算它们。我最终得到这样的东西:

count(concat("//sales:", "$variable", "Available"))

并导致错误:

Can not convert #STRING to a NodeList!

我认为如果我能以某种方式评估() concat 的结果就足够了,因此它将成为实际的 NodeList。是否有适当的功能来做到这一点?

我在 Apache Camel 中进行此文本操作,但 IMO 并不那么重要。

编辑:

更准确地说:Apache Camel 作为一个管道工作,XMLs 通过它,您可以以某种方式处理这些 XMLs - 比如根据 XMLs 内容或结构强加一些规则。这就是为什么我需要它是动态的。

我的情况是这样的:

  1. 查看 xml 并获取元素operationName的内容
  2. 在其他文档中搜索由小写operationName和字符串文字“Available”构成的元素

因此,如果我的operationName是 FOOBAR,那么我想检查节点是否存在//sales:foobarAvailable

4

2 回答 2

2

XSLT/XPath 直到版本 3.0 才支持动态生成的 XPath 表达式的评估,目前处于早期 WD(工作草案)状态。

如果对 XPath 表达式了解更多,那么通常可以设计一些解决方案。

因此,如果您更详细地描述您的问题,那么很有可能有人能够提供帮助。

更新:有来自 OP 的新信息:

所以如果我的 operationName 是FOOBAR,那么我想检查节点是否存在//sales:foobarAvailable

这很容易做到:

使用

//sales:*[local-name()
         =
          concat(translate(operationName, $vUpper, $vLower), 'Available')
         ]

其中 $vUpper 和 $vLower 定义为(可以替换为):

'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

'abcdefghijklmnopqrstuvwxyz'
于 2011-02-21T17:24:43.973 回答
0

如果您的 XSLT 处理器没有 xx:evaluate 扩展(并且您不能切换到有扩展),那么在某些情况下可能有用的另一种技术是编写元样式表——一个创建或修改另一个样式表。然后你在某种管道中运行这两个。

于 2011-02-21T23:08:48.047 回答