我不是XSLT专家,在我的下面的xslt代码中,试图从xml字符串中提取值,如下所示。
XML输入为字符串:
==========================================================================
<?xml version="1.0" encoding="UTF-8" ?>
<RootElement xmlns="http://com.nt.int/NT/v1.0/CustomInputs">
<stringFlag><RESPONSE><RESULT>
<RESPONSECODE>20000</RESPONSECODE>
<MESSAGE>Successfully Received Revenue Information</MESSAGE>
<STATUS>OK</STATUS>
</RESULT>
</RESPONSE>
</stringFlag>
</RootElement>
==================================================
XSLT样式表代码如下:
<xsl:template match="/">
<xsl:variable name="test">
<xsl:copy-of select="/ns0:RootElement/ns0:stringFlag"/></xsl:variable>
<xsl:variable name="vTestNodeset" select="document('')/*/*/xsl:variable[@name='test']"/>
<xsl:variable name="var1" select="string($vTestNodeset/stringFlag/RESPONSE/RESULT/RESPONSECODE)"/>
<xsl:variable name="var2" select="string($vTestNodeset/stringFlag/RESPONSE/RESULT/MESSAGE)"/>
<xsl:variable name="var3" select="string($test/RESPONSE/RESULT/STATUS)"/>
<output1><xsl:value-of select="$var1"/></output1>
<output2><xsl:value-of select="$var2"/></output2>
<output3><xsl:value-of select="$var3"/></output3>
</xsl:template>
期望XML输出如下
<?xml version="1.0" encoding="UTF-8"?>
<output1>20000 </output1>
<output2>Successfully Received Revenue Information </output2>
<output3>OK</output3>
我无法按预期得到结果。我知道可能的方式,但没有帮助。请帮忙,谢谢。
答案 0 :(得分:0)
但是vTestNodeset总是空的,我想是的 select =“document('')/ * / xsl:variable [@ name ='test']”未执行为 预期
不,它为空的原因是$test
变量是xsl:template
的子项和xsl:styleshet
的子项(未在您的代码段中显示) - 所以正确的路径是它会是:
document('')/*/*/xsl:variable[@name='test']
可能有其他原因导致它为空。我们这里没有完全可重复的例子。但是如果你将代码减少到所需的最低值:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="test">TEST</xsl:variable>
<result>
<xsl:value-of select="document('')/*/*/xsl:variable[@name='test']"/>
</result>
</xsl:template>
</xsl:stylesheet>
你应该获得:
<?xml version="1.0" encoding="UTF-8"?>
<result>TEST</result>
结果。