2016-04-04 3 views
0

Ich möchte neue Knoten in meine Identitäts-Transformation einfügen, damit die Ausgabe auch die neuen Knoten enthält.Nicht vorhandene Knoten von Beispiel-XML in Identitäts-Transformation mit XSLT replizieren

Hier ist meine Identität verwandeln:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0"> 
<xsl:output method="xml"/> 
<xsl:template match="/"> 
    <xsl:apply-templates select="@*|node()"></xsl:apply-templates> 
</xsl:template> 
<xsl:template match="FIELD1"></xsl:template> 
<xsl:template match="ROWSET"> 
    <listing> 
     <xsl:apply-templates select="@*|node()"></xsl:apply-templates> 
    </listing> 
</xsl:template> 
<xsl:template match="ROW"> 
    <listing> 
     <xsl:apply-templates select="@*|node()"></xsl:apply-templates> 
    </listing> 
</xsl:template> 
<xsl:template match="FIELD2"> 
    <title lang="en_US"> 
     <xsl:apply-templates select="@*|node()"></xsl:apply-templates> 
    </title>" 
</xsl:template> 
<xsl:template match="FIELD5"> 
    <content lang="en_US"> 
     <xsl:apply-templates select="@*|node()"></xsl:apply-templates> 
    </content> 
</xsl:template> 
<xsl:template match="FIELD6"> 
    <price> 
     <!-- output Salary as custom text --> 
     <xsl:text>Salary is </xsl:text> 
     <xsl:apply-templates select="@*|node()"></xsl:apply-templates> 
    </price> 
</xsl:template> 
<xsl:template match="FIELD4"> 
    <region> 
     <xsl:apply-templates select="@*|node()"></xsl:apply-templates> 
    </region> 
</xsl:template> 
<xsl:template match="FIELD3"> 
    <custom name="client"> 
     <xsl:text>Company name is </xsl:text> 
     <xsl:apply-templates select="@*|node()"></xsl:apply-templates> 
    </custom> 
</xsl:template> 
<xsl:template match="FIELD7"> 
    <custom name="link">    
     <xsl:apply-templates select="@*|node()"></xsl:apply-templates>    
    </custom> 
</xsl:template> 
<!-- output result --> 
<xsl:template match="@*|node()"> 
    <xsl:copy>      
     <xsl:apply-templates select="@*|node()"></xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

Das Beispiel XML, die ich meine Identität verwandeln will, ist zu replizieren:

<?xml version="1.0" encoding="utf-8" ?> 
<listings> 
<listing> 
    <title lang="en_US"><![CDATA[Title in USmana1]]></title> 
    <content lang="en_US"><![CDATA[Lor4em ipsum dolor sit amet,  consectetur adipiscing elit. Donec id nulla dolor. Ut aliquet, mauris id molestie porttitor, dui lorem pretium sem, quis vestibulum orci purus ultrices lacus. Nulla accumsan tortor porta nibh consequat rhoncus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi elementum venenatis ante eu porta. Curabitur ultricies nunc vel elit rutrum scelerisque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse rutrum lectus quis sem malesuada nec placerat sapien malesuada.]]></content> 
    <category lang="en_US">Auto</category> 
    <contactemail>[email protected]</contactemail> 
    <contactname>Mr. False Name1</contactname> 
    <price>123.45</price> 
    <currency>USD</currency> 
    <city_area>07841454774</city_area> 
    <city>Arizona</city> 
    <region>Arizona</region> 
    <countryId>US</countryId> 
    <country>United States</country> 
    <custom name="client">Companie</custom> 
    <custom name="tip">Vanzare</custom> 
    <image>http://conejo.me/cats/153.jpg</image> 
    <image>http://conejo.me/cats/598.jpg</image> 
    <image>http://conejo.me/cats/1908.jpg</image> 
    <datetime>2013-03-08 12:34:56</datetime> 
</listing> 
<listing> 
    <title lang="en_US"><![CDATA[Title in English 2]]></title> 
    <content lang="en_US"><![CDATA[Lor3em ipsum dolor sit amet, consectetur adipiscing elit. Donec id nulla dolor. Ut aliquet, mauris id molestie porttitor, dui lorem pretium sem, quis vestibulum orci purus ultrices lacus. Nulla accumsan tortor porta nibh consequat rhoncus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi elementum venenatis ante eu porta. Curabitur ultricies nunc vel elit rutrum scelerisque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse rutrum lectus quis sem malesuada nec placerat sapien malesuada.]]></content> 
    <category lang="en_US">Real-Estate</category> 
    <contactemail>[email protected]</contactemail> 
    <contactname>Mrs. True Name 123 1</contactname> 
    <price>98.76</price> 
    <currency>USD</currency> 
    <city_area>0845744774</city_area> 
    <city>Bucks</city> 
    <region>Arizona</region> 
    <countryId>US</countryId> 
    <country>United States</country> 
    <custom name="client">Companie</custom> 
    <custom name="tip">Inchiriere</custom> 
    <image>http://conejo.me/cats/13.jpg</image> 
    <image>http://conejo.me/cats/598.jpg</image> 
    <image>http://conejo.me/cats/1908.jpg</image> 
    <datetime>2012-08-03 12:34:56</datetime> 
</listing> 

Wie Sie sehen können, verwandelt meine ist den Knoten nicht enthalten wie z. B. Kategorie. Wie kann ich nicht existierende Knoten in meine Identitätstransformation einfügen (d. H. Nicht in die XML passen, die transformiert werden muss), damit ich die Struktur der Beispiel-XML, die ich oben eingefügt hatte, replizieren kann?

--- weitere Informationen ---

Snippet meiner ursprünglichen XML ist:

<?xml version="1.0"?> 
<ROWSET> 
    <ROW> 
     <FIELD1></FIELD1>
 
     <FIELD2>job_title</FIELD2> 
     <FIELD3>company</FIELD3> 
     <FIELD4>location</FIELD4> 
     <FIELD5>description</FIELD5> 
     <FIELD6>salary</FIELD6> 
     <FIELD7>link</FIELD7> 
    </ROW> 
    <ROW> 
     <FIELD1>1</FIELD1> 
     <FIELD2>ADMINSTRATIVE ASSISTANT</FIELD2> 
     <FIELD3>   Company name [here]</FIELD3> 
     <FIELD4>Georgia</FIELD4> 
     <FIELD5>A great place to work for…</FIELD5> 
     <FIELD6>$53,000 </FIELD6> 
     <FIELD7>[Link](blah.com)</FIELD7> 
    </ROW> 
    <ROW> 
     <FIELD1>2</FIELD1> 
     <FIELD2>OFFICE SPECIALIST</FIELD2> 
     <FIELD3>  Company name [here]</FIELD3> 
     <FIELD4>Georgia</FIELD4> 
     <FIELD5>Provide customer service to patient…</FIELD5> 
     <FIELD6>$43,000 </FIELD6> 
     <FIELD7>[Link](blah.com)</FIELD7> 
    </ROW> 
</ROWSET> 

---- Weitere Einzelheiten: ----

Was ich versuche Zu tun ist, das ursprüngliche XML zu transformieren, um wie das Beispiel XML zu aussehen, das ich früher bekannt gegeben hatte. Nichtsdestoweniger hat das ursprüngliche XML keine Knoten wie Kategorie, E-Mail und so weiter. Ich möchte ähnliche Knoten aus Beispiel-XML hinzufügen, damit ich eine XML-Seite haben kann, die ich einem Plugin zuführen könnte, das die Daten in meine Datenbank einfügt. Das Plugin, das ich für eine Software verwende, ist so spezifisch, dass, wenn eine XML-Struktur nicht der Struktur des Beispiel-XML ähnelt, das Plugin die Daten nicht in die Datenbank einfügen würde.

+0

Identity transformiert das Quelldokument im Wesentlichen. Sie können immer neue Knoten nach einer anderen Vorlage hinzufügen. Bitte posten Sie das Original-XML-Snippet, damit wir sehen können, was Sie zu tun versuchen. – Parfait

+0

Ich aktualisiere nur meine Frage mit mehr Details. –

+0

Möchten Sie, dass die neuen Knoten als leere Elemente ausgegeben werden, oder wollten Sie einen Standardwert in? –

Antwort

0

Wenn die Reihenfolge der Elemente in der Ausgabe nicht wichtig ist, können Sie die Ausgabe nur die zusätzlichen Knoten in der Vorlage, die ROW Element entspricht

<xsl:template match="ROW"> 
    <listing> 
     <xsl:apply-templates select="@*|node()" /> 
     <category>Default Category</category> 
     <contactemail>Default Email</contactemail> 
     <contactname>Default Contact</contactname> 
    </listing> 
</xsl:template> 

Wenn jedoch die Reihenfolge wichtig war, und Sie haben Wenn Sie möchten, dass die zusätzlichen Knoten an einer bestimmten Position ausgegeben werden, können Sie dies tun, indem Sie die vorhandenen Knoten explizit auswählen und die zusätzlichen Knoten dazwischen ausgeben:

<xsl:template match="ROW"> 
    <listing> 
     <xsl:apply-templates select="@*" /> 
     <xsl:apply-templates select="FIELD1|FIELD2" /> 
     <category>Default Category</category> 
     <contactemail>Default Email</contactemail> 
     <contactname>Default Contact</contactname> 
     <xsl:apply-templates select="FIELD3|FIELD4|FIELD5|FIELD6|FIELD7" /> 
    </listing> 
</xsl:template> 
+0

Danke für die Antwort Tim C. Ich frage mich nur, in XML, ist die neue Linie wichtig? Während ich die Lösung von Ihnen ausprobiere, scheint es, dass die neuen Knoten auf der gleichen Linie liegen. –

+0

Versuchen Sie, dem Befehl "xsl: output" einen "Einzug" hinzuzufügen. '' –

+0

Tim C, vielen Dank. –