2015-05-28 67 views
0

我想用xsl文件創建一些html。它大部分工作正常,但我與匹配規則替換一部分XML的困惑。這裏是一個例子,我只需要用xsl規則替換secondLine標籤。什麼是正確的xsl來取代xml的一部分

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="test.xslt" ?> 
<website> 
    <content> 
    <b>First Line</b> 
    <br/> 
    <secondLine/> 
    <br/> 
    <b>Third Line</b> 
    </content> 
</website> 

XSL文件:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
    <xsl:output method="html" 
       encoding="utf-8" /> 

<xsl:template match="/"> 
    <html> 
    <head></head> 
    <body> 
     <xsl:apply-templates /> 
    </body> 
    </html> 
</xsl:template> 

<xsl:template match="content/secondLine"> 
    <b>Second Line</b> 
</xsl:template> 

<xsl:template match="content"> 
    <xsl:copy-of select="current()/node()" /> 
</xsl:template> 

它是不是真的更換二線。我要找輸出這樣

<html> 
<head></head> 
<body> 
<b>First Line</b> 
<br/> 
<b>Second Line</b> 
<br/> 
<b>Third Line</b> 
</body> 
</html> 
+1

您要查找的實際結果是什麼? - 提示:您的第三個模板會阻止您應用第二個模板。 –

+0

是的,我知道第三個模板阻止了第二個模板。我正在尋找所有三行中的HTML文件(用所需的輸出編輯問題)。我試圖改變規則,但不管怎樣,它都沒有顯示正確的結果。 – Samuel

回答

1

該工具在這樣的情況下使用 - 當你只想修改XML輸入的部分,並留下大部分完整的 - 是identity transform template,該副本的一切,是 - 除非另一個模板覆蓋(更多)特定節點。

請嘗試以下樣式:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="/website"> 
    <html> 
     <head/> 
     <body> 
     <xsl:apply-templates select="content/*"/> 
    </body> 
    </html> 
</xsl:template> 

<xsl:template match="secondLine"> 
    <b>Second Line</b> 
</xsl:template> 

</xsl:stylesheet> 

正如你可以看到,它創建了兩個默認的例外規則:第一個創建HTML包裝,並跳過現有content包裝;第二個替換了secondLine節點。

+0

嗯。打我30秒。 :)啊,以及... – Tomalak

+0

謝謝......看起來合乎邏輯 – Samuel

相關問題