4

XML ドキュメントに次のようなものがあります。

<variables>
    <variable>
        <name>ctrl_btn</name>
        <value>button</value>
    </variable>
    <variable>
        <name>ctrl_snpt_calctrl</name>
        <value>The date entered must be less than or equal to</value>
    </variable>
</variables>

Powershell を使用して、ドキュメント内の特定の要素を引き出すことができます (インデックス番号に基づいて名前または値要素を取得するなど)。ただし、これらのインデックスがどのように機能するか (またはインデックスの名前が何であれ) には従いません。たとえば、name[1] を検索すると ctrl_btn が返されますが、name[0] であると想定していました。誰かがそれを説明できますか?

しかし、私の本当の問題は、ドキュメント内の要素の特定のコレクションを削除するスクリプトを作成することです。たとえば、次のものを削除したい場合:

    <variable>
        <name>ctrl_snpt_calctrl</name>
        <value>The date entered must be less than or equal to</value>
    </variable>

私は周りを検索しましたが、ほとんどの例は、上記のようにグループ全体ではなく、XML から特定のノードを削除するだけです。

名前と値は、XML ドキュメント内で常に一意です (ちなみに、この要素には 5000 を超える異なる名前と値の組み合わせが含まれてい<variable></variable>ます。

削除したい要素のリストは、名前の値のみをリストするテキスト ファイルに含まれています (たとえば、テキスト ドキュメントには ctrl_btn と ctrl_snpt_calctrl がリストされます)。

わかりやすいように、スクリプトが実行するプロセス全体を次に示します。

  1. XML ドキュメントのコンテンツを取得する
  2. <name></name>ドキュメント内のすべてのアイテムの要素間の値を取得します
  3. ファイルのリストに対して検索が実行され、その名前がファイル内で使用されていることが確認されます。
  4. 名前が使用されていない場合は、テキスト ファイル (たとえば、not_found.txt) に書き込まれます。
  5. <variable></variable>` が not_found.txt で見つかった名前と等しい場合は、タグとそれらの間のすべてを削除します。

上記のプロセスが説明に役立つかどうかはわかりませんが、含めたほうがよいと思いました。

では、これらをどのように削除しますか?

4

1 に答える 1

8

各要素が削除する可変要素の名前である文字列配列があると仮定すると、次のように実行できます。

$names = 'ctrl_btn','ctrl_snpt_calctrl'

$xml.variables.variable | ? { $names -contains $_.name } | % {$xml.variables.RemoveChild($_)}

Powershellを使用して、ドキュメント内の特定の要素を引き出すことができます(インデックス番号に基づいて名前または値の要素を取得するなど)。ただし、これらのインデックスがどのように機能するか(またはインデックスがどのように呼ばれるか)については説明しません。たとえば、name [1]を探すとctrl_btnが得られますが、それはname[0]であると想定していました。誰かがそれを説明できますか?

XMLの順序は保証されていないため、これに依存しないでください。たとえば、私のマシンでは、期待どおりの結果が得られます。

$xml.variables.variable.name[0] = ctrl_btn

$xml.variables.variable.name[1] = ctrl_snpt_calctrl
于 2012-10-24T22:02:57.113 に答える