2017-11-16 1 views
0

Dieser Austausch ist der Eingang xml -Wie bei der Suche nach einigen Knoten eine XML-Datei zu transformieren und die Werte

<payload id="001"> 
    <termsheet> 
      <format>PDF</format> 
      <city>New York</city> 
    </termsheet> 
</payload> 

Wir Xalan verwenden für die meisten unserer XML-Transformationen und wir sind auf XSLT 1.0 Ich möchte eine XSLT-Vorlage zu schreiben, die die Eingabe in den folgenden Ausgang umwandeln würde -

<payload id="001"> 
    <termsheet> 
      <format>pdf</format> 
      <city>Mr. ABC</city> 
    </termsheet> 
</payload> 

habe ich versucht, viele Antworten auf SO, aber um dieses Problem nicht bekommen.


Entschuldigung dafür, dass es nicht klar war, zu weniger war eine über Vereinfachung. Ich möchte den Namen der Stadt verwenden und eine Java-Methode aufrufen, die einen Geschäftskontakt aus dieser Stadt zurückgibt. Ich habe die ursprüngliche Frage aktualisiert

+0

geben Duplikat von https://stackoverflow.com/questions/3053828/lowercase-conversion-in-xsl –

Antwort

1

Ich denke, dass der einfachste Weg ist, Java-Erweiterung mit Xalan zu verwenden, können Sie eine einfache Java-Klasse schreiben, die die Geschäftslogik implementiert, die Sie benötigen, und rufen Sie dann von Ihrem Xslt. Das Stylesheet ist ganz einfach

<xsl:stylesheet version="1.0" 
    xmlns:java="http://xml.apache.org/xalan/java" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    exclude-result-prefixes="java"> 

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

    <xsl:template match="termsheet/city"> 
     <xsl:copy> 
      <xsl:value-of select='java:org.example.Card.getName(.)'/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Sie auch die Java-Klasse

aufgerufen schreiben neeed
package org.example 

public class Card { 

    public static String getName(String id) { 
    // put here your code to get what you need 
    return "Mr. ABC" 
    } 
} 

gibt es andere Möglichkeiten, das zu tun, und Sie sollten wirklich ein Auge auf die Dokumentation über xalan extensions

+0

Vielen Dank !!! Ich habe mit dem Xpath-Match gekämpft und deine Lösung hat so gut funktioniert. Gibt es eine Möglichkeit zu vermeiden, Tag manuell zu spezifizieren und es mit Hilfe von xslt abzuleiten? – Bhushan

+0

Ich denke, Sie denken an die Anweisung, ich aktualisierte die Antwort. – gtosto

Verwandte Themen