XML形式のファイルがあります。
{XML file with similar tags - SubRecord and Property}
...
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">Value i'm Concerned to Modify</Property>
</SubRecord>
...
私の要求。この特定のサブレコードの「デフォルト」値を取得し、条件に応じて更新します。これを行うには、この特定のタグ「name」にアクセスしてその値を変更する必要があります。
SED/AWK/GREPを使用する方法はありますか?
編集:@terdonのアップデートに基づいています。
- すべてのセクションに1行しかありませんか?いいえ
- デフォルトは常に最後の値ですか?常に上から3番目(名前、プロンプト、デフォルト)
- 大文字と小文字を区別しますか?それはすべてですか?大文字と小文字を区別します。
- 空行がありますか?そうではありません。しかし、それを取り除くために事前準備をすることはできます。
- ファイルがインデントされていますか?はい。
例: ...
<SubRecord>
<Property Name="Name">Search</Property>
<Property Name="Prompt">Some Text</Property>
<Property Name="Default">abc.txt</Property>
</SubRecord>
...
同様の属性とサブレコードを持つ大規模なXMLファイルで、まず「検索」パラメータのすべての属性を見つける必要があります。
「検索」を見つけたら、デフォルト値を確認する必要があります。 abc.txt の場合はその値を保持し、xyx の場合は継続する必要があります。 abc.txtまたはxyzの代わりにabc.txtに更新する必要があります。
ベストアンサー1
XMLはXMLをサポートするツールとして扱われるべきです。
XMLStarletはそのようなツールです。
Property
属性があり、値が or でないノードの値を設定する方法は次のとおりです。Name
Default
abc.txt
xyx
xml ed -u '//SubRecord/Property[@Name="Default" and . != "xyx" and . != "abc.txt"]' -v 'abc.txt' file.xml
次のXMLファイルが提供されます。
<?xml version="1.0"?>
<Record>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">zzz</Property>
</SubRecord>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">abc.txt</Property>
</SubRecord>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">xyx</Property>
</SubRecord>
</Record>
これは生産します
<?xml version="1.0"?>
<Record>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">abc.txt</Property>
</SubRecord>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">abc.txt</Property>
</SubRecord>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">xyx</Property>
</SubRecord>
</Record>
(第1条がSubRecord
修正済み)
XMLStarlet は以下で使用できます。http://xmlstar.sourceforge.net/(しかし、まず自分のパッケージマネージャを確認してください)。時にはxmlstarlet
実行可能ファイルがxml
。