我有一个像这样的xml:
<node>
<par>
Lorem ipsum dolor <bold>sit</bold> amet, consectetur adipiscing elit.
<par>
</node>
我必须打印一个这样的HTML:
<p>
<span>Lorem ipsum dolor</span>
<span class="bolder">sit</span>
<span>amet, consectetur adipiscing elit.</span>
</p>
我找不到通过中间bold
标记截断文字并添加新标记的方法
答案 0 :(得分:3)
以下转换应用于您提供的输入时,会生成您请求的结果。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
<xsl:template match="node">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="par">
<p><xsl:apply-templates /></p>
</xsl:template>
<xsl:template match="par/text()">
<span><xsl:copy-of select="." /></span>
</xsl:template>
<xsl:template match="bold">
<span class="bolder"><xsl:value-of select="." /></span>
</xsl:template>
</xsl:transform>
答案 1 :(得分:2)
以下XSLT样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="node">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="par">
<p>
<xsl:apply-templates />
</p>
</xsl:template>
<xsl:template match="text()">
<span>
<xsl:value-of select="normalize-space(.)"/>
</span>
</xsl:template>
<xsl:template match="bold/text()">
<span class="bolder">
<xsl:value-of select="normalize-space(.)"/>
</span>
</xsl:template>
</xsl:stylesheet>
应用于此输入XML时:
<node>
<par>
Lorem ipsum dolor <bold>sit</bold> amet, consectetur adipiscing elit.
</par>
</node>
产生以下输出:
<p>
<span>Lorem ipsum dolor</span>
<span class="bolder">sit</span>
<span>amet, consectetur adipiscing elit.</span>
</p>
答案 2 :(得分:1)
您可以使用text()
选择器并在内部元素的任一侧对其进行索引,从而实现您的目标。因此,当'Lorem ipsum dolor'
的上下文为par
且text()[1]
时,'amet, consectetur adipiscing elit.'
的选择器将为text()[2]