0

10,000 以上のファイルの XML を更新する必要があります。

私は初心者のプログラマーなので、可能であればすぐに使えるもの (既存のソリューション?) を使用したいと考えています。そうでない場合でも、新しいことを学び、試すことを恐れません。私は大学でコース (プログラミング ロジック) を受講して足を濡らしていますが、もちろんすぐに結果が得られるわけではありません。

すべてのファイルは、独自のシリアル番号ベースのディレクトリにあります。各ファイルは 83_XYZETC.xml と呼ばれます

これらの XML ファイルにはそれぞれ、検索してすべてのインスタンスを削除する必要がある 2 つのタグ/コンテンツがあります。

例:

<mediaFile>
content 123
</mediaFile>

<image>
image info 123
</image>

また、別のタグ内に別のタグ/コンテンツを再挿入する必要があります。例:

                  <track>
Need to insert>>  <action>UPDATE</action>
                  extra stuff etc 
                  more stuff
                  even more
                  </track>

最後に、タグ内にテキストの文字列を入力する必要がありますが、最後に入力します。
例:

<right type="labelDownload">Y</right>
</track>

提案をいただければ幸いです。Windows プラットフォームが推奨されます。ありがとうございました!

4

2 に答える 2

3

XSLT を使用すると、変換ルールを英語の記述にかなり似た形式で表現できます。

「デフォルトでは、要素にヒットすると、それをコピーしてその子を処理する」というテンプレートルールから始めます。

<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

「この要素を削除する」という mediaFile 要素と image 要素のルールが必要です (つまり、この要素に遭遇した場合、何も出力しません)。

<xsl:template match="mediaFile | image"/>

track 要素については、私の理解が正しければ、最初と最後に標準的なコンテンツを追加する必要があります。

<xsl:template match="track">
  <xsl:copy>
    <action>UPDATE</action>
    <xsl:apply-templates/>
    <right type="labelDownload">Y</right>
  </xsl:copy>
</xsl:template>

すべてをまとめるボイラープレートの xsl:stylesheet 要素を除いて、スタイルシートにあるのはこれだけです。

次に、それを 10000 個の入力ドキュメントに適用する必要があります。Ant を使用してこれを行うこともできますが、シェル スクリプトを使用して行う人もいます。または、XML 処理用の特別なシェルのようなスクリプト言語である David Lee の xmlsh もあります。または、より進取的で XProc を使用することもできます。または、小さな Java アプリケーションを作成することもできます。それは本当にあなたが最も快適なものに依存します. しかし、さらに別の言語を学びたくない場合は、XSLT 2.0 内で学習することもできますが、これはプロセッサーに少し依存します。Saxon では、テンプレート ルールを追加できます。

<xsl:template name="main">
  <xsl:for-each select="collection('.?select=*.xml')">
    <xsl:result-document href="{tokenize(document-uri(.), '/')[last()]">
      <xsl:apply-templates/>
    </xsl:result-document>
  </xsl:for-each>
</xsl:template>

次に、Saxon をインストールしたら、現在のディレクトリが XML ファイルを含むディレクトリでこれを実行する必要があります。

java net.sf.saxon.Transform -xsl:stylesheet.xsl -it:main -o:../output/result.xml
于 2013-03-19T08:33:08.923 に答える
0

XProc もご覧になりましたか?

于 2013-03-22T12:04:30.217 に答える