我有一个输入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,' ')"/>
以下不起作用。 &lt; ss_Set&gt; 元素成为节点,但value-of的输出变为&lt; ss_Set&gt;内的纯文本:
<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,' ')"/>
答案 0 :(得分:0)
你正在搅拌苹果和橘子。 node-set()
函数可以使用结果树片段并将其转换为节点集。它无法将 CDATA 转换为可解析的标记。
要了解您可以执行的操作以提取所需的字符串,请参阅:
https://stackoverflow.com/a/37777846/3016153