2010-10-12 118 views
1

我最近將一些.xml文件從docbook更改爲dita。轉換正常,但有一些不需要的工件。我難以忍受的是.dita沒有從docbook中識別<para>標籤,並用<p>替代它。你會覺得會好一些,但是這將導致以顯示項目和有序列表作爲下一行的XML,即:代替XSL:刪除xml標籤但保留其內容

 
1 
item One 
2 
item Two 

 
1 item One 
2 item Two 

所以怎麼辦我改變了:

<section> 
<title>Cool Stuff</title> 
<orderedlist> 
    <listitem> 
    <para>ItemOne</para> 
    </listitem> 

    <listitem> 
    <para>ItemTwo</para> 
    </listitem> 
</orderedlist> 

這樣:

<section> 
<title>Cool Stuff</title> 
<orderedlist> 
    <listitem> 
    ItemOne 
    </listitem> 

    <listitem> 
    ItemTwo 
    </listitem> 
</orderedlist> 

對不起,我應該已經與問題更加清晰。我需要刪除處於不同深度級別的所有標記,但始終要遵循(本地)樹列表項/段落。我對此有點新,但是我可以通過將其應用於我的docbook2dita轉換來做到這一點。它可以在那個地方嗎?

回答

5

我會用這個樣式表:

<xsl:stylesheet 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 ="listitem/para"> 
     <xsl:apply-templates/> 
    </xsl:template> 
</xsl:stylesheet> 

注意:覆蓋身份規則。 listitem/para被繞過(這保留了混合內容)

3

您可以用過濾掉<para>節點的XSLT處理DITA文件:

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

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

    <!-- replace para nodes within an orderedlist with their content -->  
    <xsl:template match ="orderedlist/listitem/para"> 
    <xsl:value-of select="."/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

對不起,我應該更清楚的問題。我需要刪除處於不同深度級別的所有標籤,但始終遵循(本地)樹orderedlist/listitem/para。我對此有點新,但是我可以通過將其應用於我的docbook2dita轉換來做到這一點。它可以在那個地方嗎? – Ace 2010-10-12 20:56:31

0

我有一個類似的問題,但我使用QtDom並不總是像XSLT 2.x規範一樣工作。 (我想到的是在某一時刻切換到Apache庫...)

我想用一個相應的類來改變我的代碼,相當於「列表項」在一個div:

<xsl:for-each select="/orderedlist/lisitem"> 
    <div class="listitem"> 
    <xsl:apply-templates select="node()"/> 
    </div> 
</xsl:for-each> 

這消除該列表項與< DIV CLASS =「列表項」 >

然後模板,你有<對>,在我的情況下,可以包括標籤替換它,所以我不能使用將改變其他兩個例子一切都變成純文本。相反,我使用的是:

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

這將刪除「para」標籤,但保留所有的孩子。所以段落可以包含格式,並且在XSLT處理中保留。

相關問題