[英]Parse tags inside XML with XSL
我有這樣的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
標簽截斷文本並添加新標簽的方法
將以下轉換應用於您提供的輸入時,將產生您請求的結果。
<?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>
以下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>
您可以通過使用text()
選擇器並在內部元素的任一側對其進行索引來實現所需的功能。 因此,在par
上下文中, 'Lorem ipsum dolor'
的選擇器將是text()[1]
和'amet, consectetur adipiscing elit.'
將是text()[2]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.