将两个复杂的XSLT变量加入到一个新变量中

时间:2014-02-26 03:59:35

标签: xml xslt xslt-1.0

我想导入或包含两个或更多外部xsl到我的主xsl。

每个xsl都有一个dictonary

<my:dictonary>
    <my:entrys lang="en">
        <firstname>First Name</firstname>
        <lastname>Last Name</lastname>
    </my:entrys>
</my:dictonary>

<my:dictonary>
    <my:entrys lang="de">
        <firstname>Vorname</firstname>
        <lastname>Nachname</lastname>
    </my:entrys>
</my:dictonary>

现在我想把所有这些都放在一个变量中

 <my:dictonary>
    <my:entrys lang="en">
        <firstname>First Name</firstname>
        <lastname>Last Name</lastname>
    </my:entrys>
    <my:entrys lang="de">
        <firstname>Vorname</firstname>
        <lastname>Nachname</lastname>
    </my:entrys>
</my:dictonary>

对于没有任何扩展名的xslt 1.0,这是否可行?

由于

T.S

1 个答案:

答案 0 :(得分:2)

首先,您向我们展示的不是“两个复杂的XSLT变量”,而是两个 XML节点集。您可以轻松地将它们组合成单个变量,例如:

<xsl:variable name="en" select="document('file1.xml')/dictonary/entrys" />
<xsl:variable name="de" select="document('file2.xml')/dictonary/entrys" />
<xsl:variable name="common" select="$en | $de" />

请注意,我已从两个源节点集中删除了my:前缀,因为(a)没有必要和(b)您没有为它提供命名空间。

生成的$ common 变量具有以下内容:

<entrys lang="en">
        <firstname>First Name</firstname>
        <lastname>Last Name</lastname>
</entrys>
<entrys lang="de">
        <firstname>Vorname</firstname>
        <lastname>Nachname</lastname>
</entrys>

并且内容的数据类型为node-set - 因此您可以在<xsl:for-each>中使用它或将模板应用于它,而无需EXSLT node-set()函数..