こんにちは、分解する必要がある 5 ノードの深さ (ルートを含む) の非常に反復的なデータがあります。(すぐに高速なサンプルを含めます。) 私がしようとしているのは、3 番目の深さのノードに基づいて、~5MB の XML ファイルをより小さなサブファイルに解析することです。しかし、その後はさらに複雑になります。
タスクの要件は次のとおりです。
- サブファイルは、抽出された第 3 レベル ノードの階層的な親を、その属性を含めて維持する必要があります。
- サブファイルは、すべての属性と子ノードを保持する必要があります。
- XSLT で処理できない場合は、Ruby で試してください。XSLT が苦手で、Ruby や Python でそれを行う方法を教えていただける場合は、お気軽にそれらの言語で回答を提供してください。(それ以外の場合は、XSLT または疑似コードを使用してみてください。)
DOM 階層:
<xml attr="whatever">
<major-group name="whatever">
<minor-group name="whatever">
<another-group name="whatever">
<last-node name="whatever"></last-node>
</another-group>
</minor-group>
</major-group>
</xml>
子と直接の親の両方を保持しながらマイナー グループ要素を分割し、そのすべてを (マイナー グループごとに) 外部ファイルに配置する必要があります。この方法で分割するファイルがいくつかあります。
そして... Ruby で XML を解析したことがなく、XSLT を使い始めたばかりなので、いずれかでタスクを実行するためのスクリプトをまだ作成できません。
XSLT がこのタスクを実行できるかどうかを知りたいと思っています。 :>
編集:
ファイルの先頭にスタイルシートを表示する機能を備えた結果のコードを次に示します。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml"/>
<xsl:template match="minor-group">
<xsl:variable name="filename"><xsl:value-of select="concat(@name,'.xml')"/></xsl:variable>
<xsl:result-document href="{$filename}">
<xsl:text disable-output-escaping="yes">
<![CDATA[<?xml-stylesheet type="text/xsl" href="../web.xslt"?>]]>
</xsl:text>
<xml>
<xsl:attribute name="whatever"><xsl:value-of select="../../@whatever" /></xsl:attribute>
<major-group>
<xsl:attribute name="whatever"><xsl:value-of select="../@whatever" /></xsl:attribute>
<xsl:copy-of select="."/>
</major-group>
</xml>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>