2009-07-16 9 views
13

Ich möchte XSL verwenden, um einige Elemente aus einem Baum zu entfernen.XSL: Wie man einen Baum kopiert, aber einige Knoten entfernt?

Angenommen, ich habe die folgende XML-Struktur:

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

Ich möchte den Benutzernamen und das Passwort Knoten von ihm entfernen. Wie würde ich mit XSL fortfahren?

Antwort

24

Sie möchten eine Identität Transformation. Ein allgemeines Entwurfsmuster in XSLT ist eine Transformation, die alles kopiert. Dann fügen Sie Vorlagen hinzu, um die Unterschiede zwischen der Quelle und dem Ziel zu entfernen oder zu transformieren.

<?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

Super, und sehr einfach illustriert! +1 – Cerebrus

+0

+1 Ich wusste nicht über dieses Muster. Sehr klar und elegant. – mkoeller

+3

Wie nennt man diese Vorlage? – Abhilash

Verwandte Themen