2016-08-26 21 views
0

Ich bin neu bei XSLT, können Sie bitte helfen, eine XSLT-Syntax zu schreiben: Ich muss meine Eingabe Xml in die Ausgabe konvertieren, die ich unten gezeigt. Ich muss nur die Knoten mit der ID '9' und '1' auswählen.XSLT: nur wenige Knoten kopieren

My input XML: 
<contacts> 
<contact> 
    <id>1234567</id> 
    <firstname>John</firstname> 
    <lastname>Smith</lastname> 
    <fields type="array"> 
     <field id="4" name="Gender">M 
     </field> 
     <field id="9" name="DOB">10/10/1961 
     </field> 
     <field id="1" name="Mobile">2132312435 
     </field> 
     <field id="7" name="E-mail">[email protected] 
     </field> 
    </fields> 
</contact> 
<contact> 
    <id>1234567</id> 
    <firstname>John</firstname> 
    <lastname>Smith</lastname> 
    <fields type="array"> 
     <field id="4" name="Gender">M 
     </field> 
     <field id="9" name="DOB">12/12/1956 
     </field> 
     <field id="1" name="Mobile">234523452345 
     </field> 
     <field id="7" name="E-mail">[email protected] 
     </field> 
    </fields> 
</contact> 
</contacts> 


The output I want: 
<contacts> 
<contact> 
    <id>1234567</id> 
    <firstname>John</firstname> 
    <lastname>Smith</lastname> 
    <fields type="array"> 
     <field id="9" name="DOB">10/10/1961 
     </field> 
     <field id="1" name="Mobile">2132312435 
     </field> 
    </fields> 
</contact> 
<contact> 
    <id>1234567</id> 
    <firstname>Pete</firstname> 
    <lastname>Kelly</lastname> 
    <fields type="array"> 
     <field id="9" name="DOB">12/12/1956 
     </field> 
     <field id="1" name="Mobile">234523452345 
     </field> 
    </fields> 
</contact> 
</contacts> 

grundsätzlich Schleife durch den Kontakt und erhalten id, Vorname, Nachname und Felder mit der ID 9 und 1.

Vielen Dank im Voraus

Antwort

0

Einfach, alles, was Sie brauchen, ist eine Identitätsvorlage und eine Überschreibungsvorlage, um unerwünschte Knoten zu löschen. Mehr wie

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

    <xsl:strip-space elements="*"/> 
    <xsl:output indent="yes"/> 

    <!-- identity template --> 

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

    <!-- If field ID is not equal to 9 and 1, delete it --> 
    <xsl:template match="field[@id!=9 and @id!=1]"/> 

</xsl:stylesheet> 
+0

Großartig. Danke Leute. – Josf

0

In Ihrem xsl, wenn Schleife über die Feldelemente in Ihrem Bereich Array können Sie Selektionskriterien zur Auswahl hinzufügen.

Zum Beispiel:

<xsl:for-each select="field[@id='9' or @id='1']"> 
    <!-- do something --> 
</xsl:for-each> 

select = "-Feld [@ id = 9 oder @ id = 1]" basicly Mittel, um die Feldelemente auszuwählen, den Zustand [@ id = 9 oder @ id = 1] passend . Das @ verweist auf ein Attribut, ohne das @ würden Sie ein Element innerhalb des Feldelements betrachten.