xsl 2.0 を使用して、言語名に基づいて異なる xml ファイルを作成しようとしています。私の入力xmlには、「en」と「es」の2つの言語しかありません。
- すべての「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 には以下が含まれます。
language 属性値 = "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 には次のものが含まれます。
language 属性値 = "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