xml – 如何使用xslt中的参数作为XPath?
发布时间:2020-12-16 07:52:15 所属栏目:百科 来源:网络整理
导读:我想添加一个元素到一个xml文档,我想传递一个参数的元素的路径. sample.xml文件: ?xml version="1.0"?stuff element1 foo2/foobar/ /element1 element2subelement/bar/ /element2 element1 foo/ bar/ /element1 /stuff 使用: xalan.exe -p myparam "elemen
我想添加一个元素到一个xml文档,我想传递一个参数的元素的路径.
sample.xml文件: <?xml version="1.0"?> <stuff> <element1> <foo>2</foo> <bar/> </element1> <element2> <subelement/> <bar/> </element2> <element1> <foo/> <bar/> </element1> </stuff> 使用: xalan.exe -p myparam "element1" sample.xml addelement.xslt 我想要以下结果: <?xml version="1.0"?> <stuff> <element1> <foo>2</foo> <bar/> <addedElement/> </element1> <element2> <subelement/> <bar/> </element2> <element1> <foo/> <bar/> <addedElement/> </element1> </stuff> 我设法写入addelement.xslt,当硬编码路径的工作,但是当我尝试使用 XPathParserException: A node test was expected. pattern = '$myparam/*[last()]' Remaining tokens are: ('$' 'myparam' '/' '*' '[' 'last' '(' ')' ']') (addelement.xslt,line 12,column 42) addelement.xslt <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="element1/*[last()]"> <xsl:copy-of select="."/> <addedElement></addedElement> </xsl:template> </xsl:stylesheet> addelement.xslt与硬编码路径替换 <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="myparam"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="$myparam/*[last()]"> <xsl:copy-of select="."/> <addedElement></addedElement> </xsl:template> </xsl:stylesheet> 感谢帮忙
我不认为你可以使用变量/参数匹配模板,如你已经编码.即使这样也不行
<xsl:template match="*[name()=$myparam]/*[last()]"> 相反,请尝试将第一个匹配的模板更改为如下,以便参数检查位于模板代码内,而不是匹配语句的一部分. <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> <xsl:if test="local-name() = $myparam"> <addedElement/> </xsl:if> </xsl:copy> </xsl:template> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |