对编码的 XML 值应用 XSLT 模板
我有一个 XML 文档,需要将其转换为 HTML。 XML 内容如下:
<root>
<enc>Sample Text : <d>Hello</d> <e>World</e></enc>
<dec>
Sample Text : <d>Hello</d> <e>World</e>
</dec>
</root>
我需要为“enc”元素中的值应用模板,就像我为以下 xslt 中的“dec”元素所做的那样。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:template match="root">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="dec">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="enc">
<xsl:value-of select="." disable-output-escaping="no" />
<br/>
</xsl:template>
<xsl:template match="d">
<b>
<xsl:value-of select="."/>
</b>
</xsl:template>
<xsl:template match="e">
<i>
<xsl:value-of select="."/>
</i>
</xsl:template>
</xsl:stylesheet>
上述 XSLT 的实际输出是:
示例文本:
Hello 世界
示例文本:Hello 世界
所需的输出是:
示例文本:你好 世界
示例文本:Hello 世界
请帮助我仅使用 XSLT 来转换编码的 xml 值。
提前致谢。
I have a XML document which I need to transform to HTML. XML Content is as follows:
<root>
<enc>Sample Text : <d>Hello</d> <e>World</e></enc>
<dec>
Sample Text : <d>Hello</d> <e>World</e>
</dec>
</root>
I need to apply a template for the value in "enc" element like I have done for the "dec" element in following xslt.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:template match="root">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="dec">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="enc">
<xsl:value-of select="." disable-output-escaping="no" />
<br/>
</xsl:template>
<xsl:template match="d">
<b>
<xsl:value-of select="."/>
</b>
</xsl:template>
<xsl:template match="e">
<i>
<xsl:value-of select="."/>
</i>
</xsl:template>
</xsl:stylesheet>
Actual output for the above XSLT is:
Sample Text :
<d>Hello</d> <e>World</e>
Sample Text : Hello World
The desired output is:
Sample Text : Hello World
Sample Text : Hello World
Please help me to transform the encoded xml value with the help of XSLT only.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于内部 XML 已被转义,因此它显示为包含尖括号的单个文本节点,而不是节点树。在使用 XSLT 处理它之前,您需要将其转换为节点树。将 XML-as-angle-brackets 转换为 XML-as-a-tree 的过程称为解析,因此您需要做的就是通过 XML 解析器处理这个内部 XML。 XSLT 中没有标准函数来执行此操作,但通常可以使用处理器特定的扩展来完成:例如
saxon:parse()
(如果您在撒克逊语)。Because the inner XML has been escaped, it is present as a single text node containing angle brackets, rather than as a tree of nodes. Before you can process it using XSLT, you need to turn it into a tree of nodes. The process of converting XML-as-angle-brackets to XML-as-a-tree is called parsing, so what you need to do is to process this inner XML through an XML parser. There's no standard function in XSLT to do this, but it can generally be done using processor specific extensions: for example
saxon:parse()
if you're in Saxon.