0

私がそのようなxml構造を持っているとしましょう:

<list>
    <main id="1" name="asd1">
        <reward id="5">
            <set reward_id="32" value="5123" />
            <set reward_id="352" value="12" />
        </reward>
        <reward id="6">
            <set reward_id="72" value="666666" />
            <set reward_id="32" value="21" />
        </reward>
    </main>
</list>

このようなファイルが 30 個あり、さらに多くの行があります。私の問題は、reward_idが「32」であるすべてのファイルからすべての行を削除したいということです。これを 1 つずつ行うと、数週間かかります。私の問題を処理できるプログラムを知っていますか?

編集:値はすべての行で変更されます。また、これら2つ以外の属性がある場合もあります。

4

2 に答える 2

1

単一の xml ファイルからの削除は、次の xsl 変換によって簡単に実行できます。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="set[@reward_id='32']" />

</xsl:stylesheet>

この変換には 2 つのテンプレートが含まれています。1 つ目は、単純にすべてをコピーする恒等変換です。2 番目は、スキップするデータの例外を定義します。この種のことは、xslt ではかなり一般的です。

これをファイルに適用するには、xsl を適用するツールを使用する必要があります。コマンド ラインからこれを行うために使用するのは xsltproc です。これは、MacOS または Linux を使用している場合、システムに既に存在している可能性があります。そうでない場合は、このページが役立ちます。

上記の変換を作成したときに、test.xsl という名前を付けて、test.xml として保存されたサンプル xml に適用しました。それを実行する

xsltproc test.xsl test.xml > testout.xml

以下を含むファイル testout.xml を作成しました。

<list>
    <main id="1" name="asd1">
        <reward id="5">

            <set reward_id="352" value="12"/>
        </reward>
        <reward id="6">
            <set reward_id="72" value="666666"/>

        </reward>
    </main>
</list>

これを一連のファイルに適用するには、シェルスクリプトを作成してファイルを調べ、それぞれにこれと同様のコマンドを適用しますが、もちろんファイル名は異なります。

于 2012-08-14T11:35:40.213 に答える
0

優れたテキスト エディターであれば、 xml プラグイン、検索と置換、正規表現を使用してこのトリックを実行できます。1 つを選択し、それをマスターします。プログラミングの神様があなたに素敵な報酬を与えてくれます!

私の選択した武器は現在Notepad++です。

別の方法として、 PowerShellなどのコマンドライン ユーティリティとシェルを使用することもできます。学習曲線は少し急勾配ですが、独自の利点ももたらします。

于 2012-08-13T14:42:30.437 に答える