ちょっと、私は深く(ルートを含む)5つのノードの深さが壊れている必要がある非常に反復的なデータを持っています。 (私は速いサンプルを1分で含めるつもりだ)私がやってみたいのは、〜5MBのXMLファイルを3番目の深さのノードに基づくより小さなサブファイルに解析することです。しかし、その後、それはより複雑になります。XSLTを使用して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がタスクに対応しているかどうかを知りたいと思っています。 :>
編集:
ここに私の結果のコードは、ファイルの先頭にスタイルシートを表示する機能で、です。
l<?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>
XSLTを大幅に改善することができます。私はあなたにお見せしますが、XSLT 1.0をまったく使用できるかどうかはわかりません。複数の出力ファイルが必要だと思いましたか? – Tomalak
XMLはv1、XSLTは2.0です。私はSaxon .NETインターフェイス経由で実行します。私の必要に応じてファイルを出力します。 –