2017-08-08 57 views
0

以除去空間元素值我有兩種類型的XML元素,一種類型是需要使用XSL

首先XML:

<Body> 
<h1>aaa</h1> 
<h1>bbb</h1> 
<h1>ccc</h1> 
</Body> 

第二XML:

<Body> 
<h1> </h1> 
<h1>aaa</h1> 
<h1>bbb</h1> 
</Body> 

XSL I」 m使用爲

<xsl:strip-space elements="h1"/> 

    <xsl:template match="@*|node()"> 
     <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy> 
    </xsl:template> 

    <xsl:template match="Body"> 
     <xsl:copy> 
     <h1><xsl:value-of select="h1"/></h1> 
     <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="h1"/> 

輸出我是GE正確地擬合爲第一XML作爲像:

<Body> 
<h1>aaa bbb ccc</h1> 
</Body> 

但是,即使我用帶空間元素作爲H1用於第二XML,我發現了象下面這樣:

<Body> 
<h1> aaa bbb</h1> 
</Body> 

預期輸出像

<Body> 
<h1>aaa bbb</h1> 
</Body> 

需要刪除h1的空格元素。但由於該標籤,它甚至結合空間。我使用了優先級,並在模板中使用了單獨的h1 [normalize-space()]標籤。但它不工作。有任何方法可以避免這種情況。請建議。我使用的是XSLT 2.0和saxon-PE 9.6.0.7。在此先感謝

回答

0

需要刪除h1的空格元素。

的空間,你看到的是第一h1元素的空間。它是第一個h1中的空字符串與第二個h1元素中的"aaa"字符串之間的分隔符。您可以通過執行驗證這一點:

<xsl:template match="Body"> 
     <xsl:copy> 
     <h1><xsl:value-of select="h1" separator="-"/></h1> 
     </xsl:copy> 
</xsl:template> 

演示:http://xsltransform.net/pNmBy1v

要刪除多餘的空間,您可以排除空h1元素(馬丁Honnen的建議我在寫這一段時間),或應用normalize-space()到結果。

+0

謝謝@Michael。它爲這個標籤工作很好。我用這個標籤

User501

1

我認爲使用<h1><xsl:value-of select="h1[normalize-space()]"/></h1>而不是<h1><xsl:value-of select="h1"/></h1>應該是一個簡單的修復。

+0

Thanks @Martin Honnen。它對這個標籤工作正常

User501