我的XML看起来像这样。
<PlayBack>
<![CDATA[<Info Event="WindowActivate" ControlName="" ControlType="" ControlRectSC="" ControlRectCL="" ParentName="" ParentType="" ControlData="" ControlMouseCL="" DialogName="" ExeName="" MouseButton="" />]]>
</PlayBack>
我想获取Info标签属性值并将它们存储在一些变量中。
预期结果
<xsl:variable name="Event">
"WindowActivate" //here i need this value
</xsl:variable>
答案 0 :(得分:0)
在你给出的例子中,是没有Info标签 - 只是一串文本恰好看起来像人眼一样,好像它包含一个信息标签。这就是CData的意思 - 一种存储文本而不将其解释为标签的方式。
如果你想使用它,你需要做2次通过。第一个提取数据并使用xsl将其写入中间文件:value-of( not copy-of - 您需要摆脱CDATA标记)。第二个读取结果,然后可以使用标记。
答案 1 :(得分:0)
您可以从http://saxon.sourceforge.net/下载Saxon 9.6 HE等XSLT 3.0处理器,然后使用XPath 3.0中引入的parse-xml
函数:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="PlayBack">
<xsl:variable name="info" select="parse-xml(.)/Info"/>
<xsl:variable name="event" select="$info/@Event"/>
<xsl:value-of select="$event"/>
</xsl:template>
</xsl:stylesheet>
如果你需要使用XSLT 1.0或2.0处理器,那么你需要检查它是否支持或允许你实现类似的扩展功能,如果没有,你需要使用已建议的两步转换解决方案转到新的XML文档(<xsl:template match="PlayBack"><xsl:copy><xsl:value-of select="." disable-output-escaping="yes"/></xsl:copy></xsl:template>
),然后使用第二个样式表处理该文件。