巨大なxml(約300MB)を繰り返し子要素に基づいて小さなファイルに分割しようとしています。この上述したようにXSLTで複数のxmlに分割して親要素を保持
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b></b>
<bb></bb>
<bbb>
<c>
<d id="1">
<x></x>
<y></y>
</d>
<d id="2">
<x></x>
<y></y>
</d>
<d id="3">
<x></x>
<y></y>
</d>
</c>
</bbb>
<e></e>
<f></f>
</a>
input.xmlにシナリオ
を例示する以下
例繰り返し子要素を有しています。この要素に基づいて、親要素と属性をそのまま維持することによって、別々の出力ファイルが必要になります。
の予想される出力out_1_a.xml
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b></b>
<bb></bb>
<bbb>
<c>
<d id="1">
<x></x>
<y></y>
</d>
</c>
</bbb>
<e></e>
<f></f>
</a>
の予想される出力out_2_a.xml
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b></b>
<bb></bb>
<bbb>
<c>
<d id="2">
<x></x>
<y></y>
</d>
</c>
</bbb>
<e></e>
<f></f>
</a>
の予想される出力out_3_a.xml
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b></b>
<bb></bb>
<bbb>
<c>
<d id="3">
<x></x>
<y></y>
</d>
</c>
</bbb>
<e></e>
<f></f>
</a>
私のXSL - sample.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="a/bbb/c/d">
<xsl:variable name="i" select="position()" />
<xsl:result-document method="xml" href="out_{$i}_a.xml">
<a>
<b></b>
<bb></bb>
<bbb>
<c>
<xsl:copy-of select="../@* | ." />
</c>
</bbb>
<e></e>
<f></f>
</a>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
これは、[OK]を動作し、私は私が望む出力を得ます。 しかし、これを達成するためのより良い方法は、a、b、bbなどの親要素をハードコーディングするよりも確実です。また、場合によってはこれらの親要素に属性が含まれており、動的です。だから、ハードコーディングは私が避けたいものです。これを解決するより良い方法はありますか?
生成される出力ファイルは、OPによって必要とされるものとは異なる構造を持っています。 「先行兄弟」と「兄弟姉妹」のコピーは適切な場所にありません。 –
ありがとう@LingamurthyCS、今私はスクリプトを更新しました – Rupesh
こんにちはルペシュ、これは私のシナリオに完全に動作します。ありがとう。 しかし、要素dのid属性の一致に関する1つの質問。要素dにatttributesがない場合は、それを分割する方法がありますか? –