2つのXMLをマージし、別のテンプレートを使用して結果を変換するXSLT変換に取り組んでいます。元のXMLファイルのフィールドに応じて、secongXMLが変化するという考え方です。例えば:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<information>
<stmtinfo>
<type>80</type>
<language>2</language>
<clientnum>15907</clientnum>
<clientname>bogus</clientname>
<clientaddress>1401 Barnacle Street, Miami, Fl</clientaddress>
</stmtinfo>
</information>
</data>
言語ノードの値(これをLANGと呼びましょう)に応じて、language{LANG}.xmlというファイルを追加する必要があります。これらのファイルの内容は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<labels>
<l1001>cliente</l1001>
<l1002>moneda de referencia</l1002>
</labels>
このようなものに:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<information>
<stmtinfo>
<type>80</type>
<language>2</language>
<clientnum>15907</clientnum>
<clientname>bogus</clientname>
<clientaddress>1401 Barnacle Street, Miami, Fl</clientaddress>
</stmtinfo>
</information>
<labels>
<l1001>cliente</l1001>
<l1002>moneda de referencia</l1002>
</labels>
</document>
そして、その結果は変換されるべきです。マージを行うために次のテンプレートを作成しました。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xalan="http://xml.apache.org/xalan" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:java="http://xml.apache.org/xalan/java/java.lang" xmlns:xfc="http://www.metafocus.no/digiforms/component">
<xsl:template match="data">
<document>
<xsl:call-template name="copy"/>
<xsl:variable name="label_file_name" select="concat('Labels_',information/stmtinfo/language,'.xml')"/>
<xsl:variable name="labels">
<xsl:copy-of select="document($label_file_name)"/>
</xsl:variable>
<xsl:for-each select="xalan:nodeset($labels)/node()">
<xsl:call-template name="copy"/>
</xsl:for-each>
</document>
</xsl:template>
<xsl:template name="copy">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
そのテンプレートを使用すると、次のようになります。
<?xml version="1.0" encoding="UTF-8"?><document xmlns:xfc="http://www.metafocus.no/digiforms/component" xmlns:java="http://xml.apache.org/xalan/java/java.lang" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xalan="http://xml.apache.org/xalan"><data>
<information>
<stmtinfo>
<type>80</type>
<language>2</language>
<clientnum>15907</clientnum>
<clientname>bogus</clientname>
<clientaddress>1401 Barnacle Street, Miami, Fl</clientaddress>
</stmtinfo>
</information>
</data><labels>
<l1001>cliente</l1001>
<l1002>moneda de referencia</l1002>
</labels></document>
どちらが正しいようです。ただし、他のテンプレートから呼び出した場合は、結果のXMLを処理します
<xsl:template match="/">
<xsl:variable name="link1">
<xsl:apply-templates mode="link1" select="node()"/>
</xsl:variable>
<xsl:value-of select="xalan:nodeset($link1)"/>
</xsl:template>
私は以下を取得しています
80215907偽物1401BarnacleStreet、Miami、FL
結果をノードセットに変換すると、ノードの「ラベル」が消えてしまうため、マージが正しく機能していないようです。私が間違っているのは何ですか?
どうもありがとうございます。
ホセ