这是关于previous question我对XSLT的回答。
总结一下,我没有意识到没有EXSLT,XSLT就不会让你动态创建带有字符串值的xpath表达式。建议的解决方法之一是
在执行转换之前查询输入文档的DOM,并将节点集传递给转换
我使用Apache Ant进行转换,并在xslt / style任务的参数上按the manual进行
要放入参数的文本值。原本打算成为XSL表达式。
听起来Apache Ant不支持这一点。它让我想知道,这个语义如何在一个支持这个的系统中工作?
那么,什么工具链或系统支持将源文档中的节点集作为参数传递给转换。奖励积分例如代码。
答案 0 :(得分:0)
您无法在标准xslt 1.0中将节点集作为参数传递。 为此,您必须使用xslt 2.0解析器。
答案 1 :(得分:0)
我不完全确定我的答案,因为我似乎无法正确理解你的问题,但根据你引用的主题和你的引言,我可以提出以下建议:
<强>的build.xml:强>
<?xml version="1.0" encoding="UTF-8"?>
<project name="Test XSLT" default="test-xslt" basedir=".">
<target name="test-xslt">
<xslt in="test.xml" style="ant-with-param.xsl" out="ant-with-param-out.xml">
<param name="param-set-id" expression="2"/>
</xslt>
</target>
</project>
<强>的test.xml:强>
<?xml version="1.0" encoding="UTF-8"?>
<params>
<set id="1">
<param name="name" value="Name from the first set"/>
</set>
<set id="2">
<param name="name" value="Name from the second set"/>
</set>
</params>
<强>蚂蚁与 - param.xsl:强>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:param name="param-set-id"/>
<xsl:variable name="param-set" select="//params/set[@id = $param-set-id]"/>
<xsl:template match="/">
<name>
<xsl:value-of select="exsl:node-set($param-set)//param[@name = 'name']/@value"/>
</name>
</xsl:template>
</xsl:stylesheet>
<强>输出强>:
<?xml version="1.0" encoding="UTF-8"?>
<name>Name from the second set</name>
给定样式表根据从构建文件传递的变量的值从输入文档中获取参数。借助源文档中的XPath表达式获取参数,稍后在exsl:node-set()
扩展函数的帮助下使用。默认情况下,ant
使用Xalan
作为xslt处理器。可以在project's home page找到其扩展的完整列表。