0

XMLファイルを入力として受け取り、そのxmlファイル内の特定の要素/タグに関連付けられた内部テキストを検索し、存在する場合はその要素/タグの位置を返すPowershellスクリプトに取り組んでいます。その要素を使用して、内部テキストを他のデータに置き換えることができます。たとえば、次のような xml ファイルがある場合があります。. .

<root>
    <category>
        <fruit>apple</fruit>
        <vegetable>broccoli</vegetable>
        <fruit>pear</fruit>
        <vegetable>brussel sprouts</vegetable>
        <fruit>orange</fruit>
    </category>
</root>

たとえば、Powershell スクリプトの一部に、"orange" という内部テキストを見つけるためのコードがあるとします。内部テキストとして「オレンジ」を含む「果物」要素の「位置」整数を変数に格納したいと思います。したがって、上記の xml ファイルでは、位置整数は 3 (基数 0 から開始する場合は 2) になります。変数を介してこの 3 番目の「果物」の場所にアクセスするには、適切な XPath ステートメントをどのように記述すればよいでしょうか? 「オレンジ」を「バナナ」などに変更できるように、この場所にアクセスしたいのかもしれません。次のことを試しましたが、成功しませんでした。. .

$orangePosition = ??? (テスト目的で 3 の値を割り当てました)

root.SelectSingleNode("descendant::category/fruit[position()=$orangePosition]")

「position()に整数値が割り当てられている場所を見てきました。特定のファイルの内部テキスト「オレンジ」がどのインデックスであるかがわからないため、整数の代わりに変数を使用したいと思います。これは可能ですか? ? 同様の問題について質問する他の投稿を見たことがありますが、解決策 (記載されている場合) を PowerShell スクリプトに適用すると、どれも機能しないようです。

4

2 に答える 2

0

必要以上に難しくしていたようです。広範な調査の結果、インデックス/位置整数を使用する必要がまったくないことがわかりました。次のことを行うことで、必要なものを正確に達成できます。. .

root.SelectNodes('//categories/fruit') | Where-Object {$ .InnerText.Contains('orange')} | foreach {$ .InnerText -eq 'バナナ'}

しかし、編集したい要素のインデックスを実際に知りたい場合も考えられます。これにより、同じ内部テキストを含む可能性のある他の同様の要素を除外できます。とにかく、これは今の私の目的には十分に機能します。回答して助けようとしたすべての人に感謝します。

于 2013-08-14T16:44:13.463 に答える