2011-09-14 8 views
1

例XML Notpad ++を使用してメモ帳++を使用してxmlファイルのN番目の要素を置き換えるにはどうすればよいですか?

<animal> 
    <dog>rex</dog> 
    <dog>rex</dog> 
    <dog>rex</dog> 
</animal> 

は、第三の犬の要素の値を置き換えるのいずれかの方法があります。だから本質的に私は動物の3番目の子を見つけてその価値を置き換えたいと思っています。

私はこれが可能ではないかもしれないと感じました。これを達成するためにスクリプトを書く必要があります。とにかく頼む価値があるのです。

あなたの興味があれば背景の詳細​​。

私は要素の3番目、4番目、5番目の子の値を置き換えなければならない何百ものXML文書を持っています。私はこれを行う最も簡単な方法を探しています。オフィスの多くの人がnotepad ++を使用していますので、notepad ++を使用するソリューションがあれば理想的です。

答えて

3

メモ帳++のものはdoes not natively support multiline regular expressionsです。

編集08.11.2012:上記はNotepad ++ 6.0以降では当てはまりません。しかし、それは5.xのために保持されます。

テキストの置換には、通常モード、拡張モード、および正規表現モードがあり、いくつか欠けています。しかし、最後の2つを組み合わせて良い結果を生み出すことができます(実際には、処理をいくつかの部分に分割することがより明確になります)。

あいまいな解決策が、作業:

起動Search -> Find in files(CTRL-SHIFT-F)、ディレクトリおよびフィルタして、指定します。

  • 任意の空白を取り除く(スペース、タブインデント)と改行 - を使用して置き換えます。検索モード=拡張、連続:何かを見つける= = \r\n\t<single space here>、置き換え= <leave the field empty><animal><dog>(.*?)</dog><dog>(.*?)</dog><dog>(.*?)</dog><dog>(.*?)</dog><dog>(.*?)</dog></animal>
  • <animal><dog>\1</dog><dog>\2</dog><dog>\3aaa</dog><dog>\4bbb</dog><dog>\5ccc</dog></animal> =と交換=何検索
    • :その後、あなたはN ++は、正規表現の処理のために好きなものですワンライナーを、持っている、
    • 検索モード=正規表現に今、あなたの操作を実行します
  • TextFX - > TextFX HTML Tidyは - > Tidyの:XMLが戻って書式設定を取得するためにインデント再調整のXML(それは少しの空白などの数が異なる場合があります)。

手順1と2で、「ファイルを置き換える」をクリックして実行します。

文字列\1、...、\5は、連続するノードの値(regexpの角括弧内の値)を参照します。それを置くか放置して、任意のテキストを追加します。 (.*?)は任意の文字にマッチする正規表現です(不自然さを表す?)ので、可能な限り短いフラグメントと一致します(そうでなければ、ファイル内にあるよりも小さい数字の<animal>が見つかる可能性があります)。

関連する問題