2017-09-07 43 views
1

自從我使用XSLT做了任何事情已有近20年了。試圖將文檔轉換爲下面的文本。如何使用XSLT將此HTML轉換爲所需的文本

<p> 
おばあさんは、とても 
<ruby><rb>喜</rb><rp>(</rp><rt>よろこ</rt><rp>)</rp></ruby>びました。<br/> 
「おじいさん、 
<ruby><rb>今</rb><rp>(</rp><rt>こん</rt><rp>)</rp></ruby> 
<ruby><rb>晩</rb><rp>(</rp><rt>ばん</rt><rp>)</rp></ruby>、このたぬきで、たぬき 
</p> 

所需的輸出

おばあさんは、とても<ruby=よろこ>喜</ruby>びました。<br/> 
「おじいさん、 
<ruby=こん>今</ruby><ruby=ばん>晩</ruby>、このたぬきで、たぬき 

我有我的文字需要轉換爲這個專有標記的多頁。

這是我開始的,但它遠沒有工作,因爲我在處理ruby標籤之外的文本。這一直是XSLT的難題嗎?

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" indent="yes"/> 
<xsl:template match="/p"> 
    <xsl:text disable-output-escaping="yes">&lt;p&gt;</xsl:text> 
      <xsl:value-of select="."/> 
    <xsl:apply-templates select="ruby"/> 
    <xsl:text disable-output-escaping="yes">&lt;/p&gt;</xsl:text> 
</xsl:template> 
<xsl:template match="ruby"> 

     <xsl:apply-templates select="rb"/> 
     <xsl:apply-templates select="rt"/> 

</xsl:template> 
<xsl:template match="rb"> 
    <xsl:value-of select="."/> 
      <xsl:text>&lt;/ruby&gt;</xsl:text> 
</xsl:template> 
<xsl:template match="rt"> 
    <xsl:text>&lt;ruby=</xsl:text> 
    <xsl:value-of select="."/> 
    <xsl:text>&gt;</xsl:text> 
</xsl:template> 
</xsl:stylesheet> 

UPDATE 啊我看到這個故事的一部分使用需要priority

<xsl:template match="/p" priority="0"> 
    <xsl:text disable-output-escaping="yes">&lt;p&gt;</xsl:text> 
     <xsl:apply-templates/> 

    <xsl:apply-templates select="ruby"/> 
    <xsl:text disable-output-escaping="yes">&lt;/p&gt;</xsl:text> 
</xsl:template> 

優先級,以確保它不會應用於未來的模板匹配的「紅寶石」和「RT 「 例如。

回答

1

解決它

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" indent="yes"/> 
<xsl:template match="/p" priority="0"> 
    <xsl:text>&lt;p&gt;</xsl:text> 
    <xsl:apply-templates/> 
    <xsl:text>&lt;/p&gt;</xsl:text> 
</xsl:template> 
<xsl:template match="ruby"> 
    <xsl:text>&lt;ruby=</xsl:text> 
    <xsl:apply-templates select="rt"/> 
    <xsl:text>&gt;</xsl:text> 
    <xsl:apply-templates select="rb"/> 
    <xsl:text>&lt;/ruby&gt;</xsl:text> 
</xsl:template> 
<xsl:template match="rb"> 
    <xsl:value-of select="."/> 
</xsl:template> 
<xsl:template match="rt"> 
    <xsl:value-of select="."/> 
</xsl:template> 
<xsl:template match="br"> 
    <xsl:text>&lt;br/&gt;</xsl:text> 
</xsl:template> 
</xsl:stylesheet> 
+1

祝賀,但我不知道爲什麼你認爲你需要的優先級。其他模板將不會應用於此模板,因爲其他模板不匹配此匹配的模板。還有一點就是隻複製元素內容的模板,就像缺少模板一樣。 – kumesana

+0

也許我需要它在我的進步中的早期階段。你是對的,現在看來沒有必要,我更好地組織了事情! –