我有一个XML文件,其属性中包含XPath字符串。像这样的东西 -
<root>
<element name="A" visible="True" text="Display Text " selected="True" />
<element name="B" visible="True" text="DisplayText" visibilityCondition="//element[@name='A']/@selected" />
</root>
<xsl:for-each select="element">
<xsl:variable name="visibleCondition" select="@visibilityCondition" />
<xsl:choose>
<xsl:when test="boolean($visibleCondition)">
<xsl:when test="$visibleCondition">
<xsl:if test="$visibleCondition='True'">
...
</xsl:if>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:when>
</xsl:choose>
</xsl:foreach>
//element[@name='A']/@selected
,而我希望解析XPath并匹配所选属性True
中的实际值。
我如何实现这一目标?
答案 0 :(得分:1)
您无法将已存储在属性中的字符串评估为XPath,这与构建要评估的xpath相同,而不是扩展名。
在您的示例boolean($visibleCondition)
中,仅检查@visibilityCondtion属性是否存在,但不会评估存储在属性中的表达式。
您可以查看答案here中关联的撒克逊扩展程序,或查看dyn:evaluate from exslt。
答案 1 :(得分:1)
此样式表使用EXSLT动态,但是,这不适用于使用saxon处理器。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dyn="http://exslt.org/dynamic"
extension-element-prefixes="dyn"
version="1.1">
<xsl:template match="root">
<xsl:for-each select="element">
<xsl:variable name="visibleCondition" select="@visibilityCondition" />
<xsl:if test="dyn:evaluate($visibleCondition)='True'">
SuCcEsS!
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我在http://xsltransform.net/中使用XALAN 2.7.1尝试了它并且它可以正常工作。