XSLT将转义序列作为参数

时间:2017-02-17 10:18:18

标签: xslt saxon

您好我有一个样式表,它接受来自ant xslt task的参数。但参数中充满了转义序列,例如<tag-name>等... 以下是参数$fileset-xmllink的原始表示形式,它是此的直接输出:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:saxon="http://saxon.sf.net/" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:param name="fileset-xml"/>
    <!--  -->
    <!--  -->
    <xsl:template match="/theRoot">
        <root>
            <xsl:value-of select="$fileset-xml"/>
        </root>
    </xsl:template>
    <!-- -->
    <!-- -->
</xsl:stylesheet>

我的目的是从该参数中生成xml格式的输出,但函数saxon:parse($fileset-xml)不喜欢这种格式的参数。我想如果我们用它们的渲染值替换转义字符,我会得到一个有效的xml文件,但是怎么做呢?

处理器为saxonb9-1-0-8j

EDITION_1

作为@MartinHonnen评论的一部分:

处理器:

<classpath location="../../infrastructure/SaxonEE9-7-0-11J/saxon9ee.jar:/net.sf.saxon.TransformerFactoryImpl"/>

XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:param name="fileset-xml"/>
    <xsl:variable name="file-set-xml" select="parse-xml(parse-xml-fragment('&lt;a/&gt;'))"/>
    <!--  -->
    <!--  -->
    <xsl:template match="/theRoot">
        <root>
            <xsl:copy-of select="$file-set-xml"/>
        </root>
    </xsl:template>
    <!-- -->
    <!-- -->
</xsl:stylesheet>

错误:

[xslt] : Fatal Error! Error checking type of the expression 'funcall(parse- xml-fragment, [literal-expr(<a/>)])'. Cause: Error checking type of the expressi on 'funcall(parse-xml-fragment, [literal-expr(<a/>)])'.

1 个答案:

答案 0 :(得分:1)

如果您提供&lt;a/&gt;形式的字符串(10个字符),则XPath函数parse-xml-fragment()会将其转换为字符串<a/>(4个字符),如果您申请对这个4个字符的字符串parse-xml()(或parse-xml-fragment()),您将获得一个节点树,其中包含一个名为&#34; a&#34;的空元素。

所以你需要解析两次数据。