【发布时间】:2012-07-26 12:12:57
【问题描述】:
我一直在 xpath 1.0 中使用以下 xpath 选择
<xsl:variable name="id"><xsl:value-of select="./@id" /></xsl:variable>
preceding::exm:messageFlow[@sourceRef = $id]/@targetRef
这很好用,完全符合我的要求。 但是我开始将 XSLT 2.0 与 xPath 2.0 结合使用,但这不再适用 (使用 Altova XML 处理器) 我收到以下错误:
Kann nicht mit Ziel-Typ besetzt werden - 现在开始 Element ist 'sid-B3FD7EE5-043 3-4939-A69F-E74B30FDEB1C' vom Typ xs:untypedAtomic, Typ xs:QName erwartet - =
大致翻译为:
无法设置为目标类型 - 当前元素是 'sid-B3FD7EE5-043 3-4939-A69F-E74B30FDEB1C' 类型为 xs:untypedAtomic,类型 xs:QName 预期 -
以前我在这个选择上遇到过类似的问题:
following::exm:*[exm:incoming = $out] | preceding::exm:*[exm:incoming = $out]
这在 xpath 1.0 中再次起作用,但在 xPath 2.0 中返回了类似的错误 改成之后
following::exm:*[exm:incoming/text() = $out] | preceding::exm:*[exm:incoming/text() = $out]
它也适用于 xPath 2.0。我确实尝试过对属性做类似的事情,但没有奏效
相应 XML 的一小部分摘录:
<messageFlow id="sid-80B618A4-E6BF-4438-AF5D-5111AD308FE6" name="" sourceRef="sid-B3FD7EE5-0433-4939-A69F-E74B30FDEB1C" targetRef="sid-6EB2DB76-CC19-48AD-A073-D37C7489F211"/>
<task completionQuantity="1" id="sid-B3FD7EE5-0433-4939-A69F-E74B30FDEB1C" isForCompensation="false" name="call service" startQuantity="1">
<incoming>sid-2B2BA651-B5BA-4195-9B5B-E6855B1138F4</incoming>
<incoming>sid-DA4B86E8-C3F2-497C-8C0D-218E95CE9FD1</incoming>
<outgoing>sid-008948DE-BA59-4897-AC37-2C3AA63DCD82</outgoing>
</task>
【问题讨论】: