xalan:nodeset 不渲染任何节点,只渲染文本

xalan:nodeset not rendering any node but just text

我有一个输入 xml 文件,其中包含一个元素,该元素又包含 xml 文本。我想读取元素文本,然后将其放入节点集中,以便我可以使用 xpath 搜索内容。这是作品:

<TEMPLATE_STRUCTURE_XML><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<TRANSACTION>
<VERSION>1.3</VERSION>
<SCREEN>something123</SCREEN>
</TRANSACTION>
]]></TEMPLATE_STRUCTURE_XML>

在这种情况下,我想获得值 something123

问题是,如果我将内部 xml 文件的部分(硬编码)放在 xsl 中,xalan:nodeset() 工作正常,但它当我使用 xsl:value-of 时不起作用。 oXygen XMLeditor 向我显示 value-of 的结果已变成纯文本,而不是节点。

以下作品:

    <xsl:variable name="statementSummaryData">
        <ss_Set>
            <TRANSACTION>
                <VERSION>1.3</VERSION>
                <SCREEN>something123
                </SCREEN>
            </TRANSACTION>
        </ss_Set>
    </xsl:variable>
    <xsl:variable xmlns:xalan="http://xml.apache.org/xalan" name="ssTemplatesNodeSet" select="xalan:nodeset($statementSummaryData)"/>
    <xsl:value-of select="substring-before($ssTemplatesNodeSet//SCREEN,' ')"/>

以下无效。 元素变成了节点,但是value-of的输出变成了里面的纯文本:

    <xsl:variable name="statementSummaryWithHeader">
           <xsl:value-of select="TEMPLATE_STRUCTURE_XML" disable-output-escaping="yes"/>
    </xsl:variable>
    <xsl:variable name="statementSummaryWithNoHeader">
    <xsl:value-of select="substring-after($statementSummaryWithHeader,'?>')" disable-output-escaping="yes"/>
    </xsl:variable>
<xsl:variable name="statementSummaryData">
    <ss_Set>
    <xsl:value-of select="$statementSummaryWithNoHeader" disable-output-escaping="yes"/>
    </ss_Set>
</xsl:variable>
<xsl:variable xmlns:xalan="http://xml.apache.org/xalan" name="ssTemplatesNodeSet" select="xalan:nodeset($statementSummaryData)"/>
<xsl:value-of select="substring-before($ssTemplatesNodeSet//SCREEN,' ')"/>

以下也不起作用:

    <xsl:variable name="statementSummaryWithHeader">
           <xsl:value-of select="TEMPLATE_STRUCTURE_XML" disable-output-escaping="yes"/>
    </xsl:variable>
    <xsl:variable name="statementSummaryWithNoHeader">
    <xsl:value-of select="substring-after($statementSummaryWithHeader,'?>')" disable-output-escaping="yes"/>
    </xsl:variable>
    <xsl:variable name="statementSummaryData">
        <ss_Set>
           <xsl:value-of xmlns:xalan="http://xml.apache.org/xalan" select="xalan:nodeset($statementSummaryWithNoHeader)"/>
        </ss_Set>
    </xsl:variable>
    <xsl:variable xmlns:xalan="http://xml.apache.org/xalan" name="ssTemplatesNodeSet" select="xalan:nodeset($statementSummaryData)"/>
    <xsl:value-of select="substring-before($ssTemplatesNodeSet//SCREEN,' ')"/>

您正在混合苹果和橙子。 node-set() 函数可以将 result-tree-fragment 转换为 node-set。它无法将 CDATA 转换为可解析标记。

要了解如何提取所需的字符串,请参阅: