XSL使用动态XPATH脱离上下文

时间:2015-06-18 07:32:29

标签: xslt xpath

我试图将我从设备获取的XML重新格式化为HTML表格,而且它的格式并不常见。

它在节点名称中使用唯一引用,如下所示:

/网络/内容/主机/内容/ REF_1 /内容
/网络/内容/网络/内容/ REF_2 /内容

然后,它使用与文件另一部分相同的引用,作为内容节点的值,如下所示:

/ rules / content / rules / content / REF_3 / content / sources / content / name = REF_1
/ rules / content / rules / content / REF_3 / content / destinations / content / name = REF_2

我试图为内容编写一个模板,而不是让我获得唯一的REF_ID,我试着在另一个分支叶子中获取名称。这意味着我试图找到一个超出我实际背景的值。

我能够使用此变量检索名称XPATH:

<xsl:variable name='objName' select="concat('/storage/objects/',@linkclass,'/content/',@linktype,'/content/',current(),'/content/name/content')" />

但是,我无法在以下查询中使用此XPATH:

<xsl:value-of select="{$objName}">

我认为这不起作用,因为它不在上下文中,但当我静静地询问其中一个XPATH时,我得到了值。

我的完整代码并不复杂:

<xsl:template match="content">

<xsl:variable name='objXPATH' select="concat('/storage/objects/',@linkclass,'/content/',@linktype,'/content/',current(),'/content/name/content')" />
<xsl:variable name='obj' select="{$objXPATH}" />

<xsl:element name="a">
<xsl:attribute name="href">
#<xsl:value-of select="."/>
</xsl:attribute>

<xsl:value-of select="$obj"/>

<br />
</xsl:element>

</xsl:template>

我需要帮助才能解决这个问题,因为有一天我没有进化,而且它让我发疯了。我更喜欢脚本小子而非真正的开发者。

1 个答案:

答案 0 :(得分:0)

动态评估(将变量中的字符串视为XPath表达式并对其进行评估)在许多XSLT处理器中作为供应商扩展提供,并且在XSLT 3.0中引入xsl:evaluate后它成为标准的一部分。如果您的XSLT处理器没有这样的扩展,您可以自己编写。或者,如果您更好地解释问题,我们可能会建议一个不需要动态评估的解决方案。