2012-06-08 55 views
-1

如何編寫一個採用所有非「元」和「答案」元素並將它們存入「my_question」模板的XSLT模板?因此,例如,給出下面的XML ...如何使用排除某些元素但包含其他元素的XSLT模板?

<question> 
    <meta> 
     ... 
    </meta> 
    <para /> 
    <para>Why?</para> 
    <answer weight="1" correctness="0"> 
     ... 
    </answer> 
    <answer weight="1" correctness="0"> 
     ... 
    </answer> 
    <answer weight="1" correctness="100"> 
     ... 
    </answer> 
    <answer weight="1" correctness="0"> 
     ... 
    </answer> 
</question> 

我希望得到的結果是

<my_question> 
    <para /> 
    <para>Why?</para>   
</my_question> 

回答

1

的身份模板是你的朋友

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

<xsl:output method="xml" encoding="utf-8" indent="yes"/> 

<xsl:template match="/"> 
    <my_question> 
     <xsl:apply-templates select="question"/> 
    </my_question> 
</xsl:template> 

<!-- ignores the specified elements. Adjust for nesting if necessary. --> 
<xsl:template match="meta | answer"/> 

<!-- Pass everything else --> 
<xsl:template match="@*|node()"> 
<xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
</xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 
1

你以一個身份模板:

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

運行它,你會看到,一切都會改變。

然後,您選擇性地移除節點,例如,像這樣:

<xsl:template match="answer" /> 

閱讀此鏈接瞭解更多信息:http://www.xmlplease.com/xsltidentity 這是非常詳細。祝你好運!

相關問題