【发布时间】:2009-12-18 21:20:53
【问题描述】:
我正在做一个 XSLT 转换,它包括合并两个 XML,然后使用另一个模板转换结果。这个想法是,根据原始 XML 文件的字段,secong XML 会发生变化。例如:
<?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>
我正在获取以下内容
80 2 15907 虚假 佛罗里达州迈阿密市藤壶街 1401 号
所以似乎合并无法正常工作,因为如果我将结果转换为节点集,节点“标签”就会消失。我做错了什么?
非常感谢。
何塞
【问题讨论】: