1

こんにちは、分解する必要がある 5 ノードの深さ (ルートを含む) の非常に反復的なデータがあります。(すぐに高速なサンプルを含めます。) 私がしようとしているのは、3 番目の深さのノードに基づいて、~5MB の XML ファイルをより小さなサブファイルに解析することです。しかし、その後はさらに複雑になります。

タスクの要件は次のとおりです。

  1. サブファイルは、抽出された第 3 レベル ノードの階層的な親を、その属性を含めて維持する必要があります。
  2. サブファイルは、すべての属性と子ノードを保持する必要があります。
  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>
4

2 に答える 2

3

「マイナー グループ」要素のリストを抽出するには、次の XPath 式のいずれかが必要になります。

/xml/major-group/minor-group (明示的な方法)
/*/*/* (一般的な第 3 レベル要素の方法)

選択したスクリプト言語で、ドキュメントを DOM に読み取り、XPath クエリのループを構築して、結果を別の出力ファイルに書き込みます。

XSLT 1.0 では、一度に複数の出力ドキュメントを生成することはできません。ただし、XSLT 2.0 は<xsl:result-document>命令によってこれをサポートします。

XSLT 2.0 エンジンを自由に使用できる場合は、その方法を試すことができます。IBM の developerWorks Web サイトでランダムに見つけたページに、開始方法が示されています:ヒント: XSLT 2.0 で複数のファイルを作成する

于 2009-05-08T23:44:12.337 に答える
0

単純な XSLT を使用して、1 つのファイルを複数の出力ファイルに解析できるとは思えません。

Ruby を使用して XML を複数の異なる XML ファイルに分割し、個別の XML ファイルを XSLT に複数回適用する場合は、動作するはずです。

于 2009-05-08T22:30:52.437 に答える