2009-07-16 47 views
13

我想使用XSL从树中删除一些元素。XSL:如何复制树,但删除一些节点?

假设我有以下XML树:

<?xml version="1.0" ?> 
<mydoc> 
    <file> 
     <colors> 
      <blue /> 
      <red /> 
      <green /> 
     </colors> 
     <secret> 
      <username /> 
      <password /> 
     </secret> 
    </file> 
</mydoc> 

我想从中删除用户名和密码的节点。我将如何继续使用XSL?

回答

24

您想要一个标识变换。 XSLT中的常见设计模式是将复制所有内容的转换。然后添加模板以删除或转换源和目标之间的不同。

<?xml version="1.0" encoding="UTF-8"?> 
<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="username|password"/> <!-- this empty template will remove them --> 
</xsl:stylesheet> 
+0

太棒了,很简单的插图! +1 – Cerebrus 2009-07-16 13:36:15