我正在尝试使用 xsl 2.0 根据语言名称创建不同的 xml 文件。在我的输入 xml 中,这里只有 2 种语言,“en”和“es”。
- 所有基于“en”的人都将转到 en.xml 和
- 所有基于“es”的人都将转到 es.xml 和
- 所有同时拥有“en”和“es”的人都必须同时访问 en.xml 和 es.xml。
我的输入 XML: 源 xml 是关于人员列表、他们的地址和语言的
<persons>
<person name="Alice">
<Addresses>
<Address type ="personal">
<language name = "en">
</language>
</Address>
<Address type ="business">
<language name = "en">
</language>
</Address>
</Addresses>
</person>
<person name="Bob">
<Addresses>
<Address type ="personal">
<language name = "es">
</language>
</Address>
<Address type ="business">
<language name = "es">
</language>
</Address>
</Addresses>
</person>
<person name="Stacy">
<Addresses>
<Address type ="personal">
<language name = "en">
</language>
</Address>
<Address type ="business">
<language name = "es">
</language>
</Address>
</Addresses>
</person>
</persons>
输出文件 en.xml 将具有:
所有包含语言属性值 = "en" 的人都应该转到 en.xml 文件。在这种情况下,Alice 和 Stacy 都需要访问 en.xml
<person name="Alice">
<Addresses>
<Address type ="personal">
<language name = "en">
</language>
</Address>
<Address type ="business">
<language name = "en">
</language>
</Address>
</Addresses>
</person>
<person name="Stacy">
<Addresses>
<Address type ="personal">
<language name = "en">
</language>
</Address>
<Address type ="business">
<language name = "es">
</language>
</Address>
</Addresses>
</person>
输出文件 es.xml 将具有:
所有包含语言属性值 = "es" 的人都应该转到 en.xml 文件。在这种情况下,Bob 和 Stacy 都需要访问 es.xml
<person name="Bob">
<Addresses>
<Address type ="personal">
<language name = "es">
</language>
</Address>
<Address type ="business">
<language name = "es">
</language>
</Address>
</Addresses>
</person>
<person name="Stacy">
<Addresses>
<Address type ="personal">
<language name = "en">
</language>
</Address>
<Address type ="business">
<language name = "es">
</language>
</Address>
</Addresses>
</person>
到目前为止我的 XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" indent="yes" name="xml"/>
<xsl:template match="/">
<xsl:for-each select="//persons">
<xsl:variable name="filename"
select="concat('allpersons/',//persons/person/Addresses/Address/language/@name,'.xml')" />
<xsl:value-of select="$filename" /> <!-- Creating -->
<xsl:result-document href="{$filename}" format="xml">
<xsl:value-of select="."/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
解决方案不应包含“en”、“es”等属性的静态匹配。因为有很多语言。任何帮助都非常感谢?
参考资料: http ://www.ibm.com/developerworks/xml/library/x-tipmultxsl/index.html