簡體   English   中英

xsl模板被xsl include覆蓋

[英]xsl template is overriding with xsl include

我正在嘗試使用xsl為xml開發html頁面時創建一些可重用的模板。 但是,當我包括其他xsl時,主要xsl模板將被覆蓋,而不是將其添加到其中。 請提出建議。

這是我的xml,

<employee>
<address>
    <street>street1</street>
    <city>city1</city>
    <doornumber>1-23</doornumber>
    <pincode>123456</pincode>
</address>
<personalinfo>
    <name>testname1</name>
    <phone>999999999</phone>
    <dob>23-09-34</dob>
</personalinfo>
<remarks>
    <education>
        <name>testname2</name>
        <college>college1</college>
        <gpa>7.5</gpa>
    </education>
</remarks>

<data>
    <name>data1</name>
</data>
<data>
    <name>data2</name>
</data>
<data>
    <name>data3</name>
</data>
<data>
    <name>data4</name>
</data>
<data>
    <name>data5</name>
</data>
</employee>

這是我的主要xsl,

 <xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:template match="/">
    <html>
        <body>    
            <table>
                <tr>
                    <th>Name</th>
                    <th>College</th>
                    <th>City</th>
                </tr>
                <xsl:apply-templates/>
            </table>
        </body>
    </html>
</xsl:template>

<xsl:template match="employee">
    <tr>
        <td>
            <xsl:value-of select="personalinfo/name"/>
        </td>
        <td>
            <xsl:value-of select="remarks/education/college"/>
        </td>
        <td>
            <xsl:value-of select="address/city"/>
        </td>
    </tr>
</xsl:template>
<!-- <xsl:include href="test_include1.xsl" /> -->
<!-- <xsl:include href="test_include2.xsl" /> -->
</xsl:stylesheet>

這是我的test_include1.xsl,

<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:template match="employee">

<table><tr>
    <th>data names</th></tr>
<xsl:for-each select="data">
<tr>
    <td>
        <xsl:value-of select="name"/>
    </td>
</tr>

</xsl:for-each>
</table>
</xsl:template>

</xsl:stylesheet>

這是我的test_include2.xsl,

<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:template match="employee">

<table><tr>
                <th>Name</th>
                <th>College</th></tr>
<tr>
    <td>
        <xsl:value-of select="personalinfo/name"/>
    </td>
    <td>
        <xsl:value-of select="remarks/education/college"/>
    </td>
    </tr>
</table>
</xsl:template>
</xsl:stylesheet>

我試圖在不同模板中模塊化相同的xml數據,以便可以在其他樣式表中重復使用相同的模板。 請提出我該如何做到這一點。 謝謝。 這是預期的結果,

     <html><body>
   <table>
        <tr>
        <th>Name</th>
        <th>College</th>
        <th>City</th>
        </tr>
        <tr>
        <td>testname1</td>
        <td>college1</td>
        <td>city1</td>
        </tr>
    </table>
    <table>
        <tr><th>data names</th></tr>
        <tr><td>data1</td></tr>
        <tr><td>data2</td></tr>
        <tr><td>data3</td></tr>
        <tr><td>data4</td></tr>
        <tr><td>data5</td></tr>
     </table>
     <table>
        <tr>
        <th>Name</th>
        <th>College</th>
        </tr>
        <tr>
        <td>testname1</td>
        <td>college1</td>
        </tr>
    </table>
    </body></html>

首先,在任何這些樣式表中我都看不到任何xsl:include聲明,所以我不太確定您在做什么。 [抱歉-錯過了淺灰色的注釋代碼-我的顯示器對比度很差。]

其次,在XSLT 1.0中,當兩個模板與具有相同優先級和優先級的相同節點匹配時,行為不是很清楚。 從技術上講這是一個錯誤,但是可以通過選擇“樣式表中的最后一個”規則來允許處理器進行恢復-當涉及多個模塊時,規則本身並不是特別好定義。

第三,您說“主要的xsl模板將被覆蓋,而不是將其添加到其中”。 這表明您對希望它的行為有一些特殊的期望,但是我無法真正弄清楚這種期望是什么。 您沒有給出任何預期的結果,所以我不知道您要達到的目標。 但是,如果您有多個與節點匹配的規則,或者您遇到錯誤,或者恰好執行了其中一個規則,那么情況永遠都是這樣-絕不會以任何方式將它們組合在一起。

這可以通過模式來實現。 另一種方法是給每個xsl:template匹配一個優先級號。 您要執行的優先級最高。 優先級是xsl:template的屬性

<xsl:template match = "employee" priority = "4"> do the task </xsl:template>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM