2013-10-31 114 views
1

我有這樣一個xml:中的XML解析標籤與XSL

<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標記並添加新標記

回答

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

您可以使用text()選擇器並將其索引到內部元素的任意一側,以達到您想要的效果。因此,對於'Lorem ipsum dolor'選擇時的par上下文將是text()[1]'amet, consectetur adipiscing elit.'text()[2]

+0

以這種方式IM鬆動的坐着,這應該是在與s的跨度特別班。 我可以做些什麼,將''標籤轉換爲字符串?並解析它? – Pablo

+0

你仍然可以選擇坐在'par/bold'上 –

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> 
+0

剛剛看到@hielsnoppe用本質上相同的解決方案打敗了我,所以我建議你接受他們的答案。 –

+0

@Pablo取決於您是否需要空間標準化。如果是的話,這是更好的。 @ BenL Fair玩,謝謝。 :-) – hielsnoppe