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 转换为可解析标记。
要了解如何提取所需的字符串,请参阅:
我有一个输入 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,' ')"/>
以下无效。
<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 转换为可解析标记。
要了解如何提取所需的字符串,请参阅: