2011-09-14 47 views
1

示例XML如何使用Notepad ++替換xml文件中的第N個元素?

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

使用Notpad ++是存在替換第三狗元素的值的任何方式。所以基本上我想找到動物的第三個孩子並代替價值。

我感覺這可能是不可能的,而且我必須寫一些腳本來實現這一點。但無論如何,總是值得一提的。

背景細節如果你感興趣。

我有數百個XML文檔,其中我必須替換元素的第3,第4和第5個子元素的值。我正在尋找最簡單的方法來做到這一點。辦公室裏的許多人使用記事本++,所以如果有使用記事本++的解決方案,那將是理想的。

回答

3

記事本++的事情是它does not natively support multiline regular expressions

編輯08.11.2012:記事本++ 6.0以上不再是真的。但它適用於5.x.

對於文本替換,它有正常模式,擴展模式和正則表達式模式,缺少一些東西。然而,最後兩個可以結合起來產生好的結果(實際上,有時甚至更清楚地將處理分成幾個部分)。

晦澀的解決方案,但工作:

啓動Search -> Find in files(CTRL-SHIFT-F),指定目錄和過濾器,然後:

  • 擺脫任何空格的(空格,製表符縮進)和換行符 - 替換使用搜索模式=擴展,連續:找到什麼= \r\n,\t,<single space here>,替換爲= <leave the field empty>在每種情況下。在此之後,你有一個班輪,這是N ++喜歡的正則表達式處理,
  • 搜索模式現在執行的操作=正則表達式
    • 查找內容= <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>
  • TextFX - > TextFX HTML精簡 - >整理:重新縮進XML得到XML格式返回(它可能在空格的數量等略有不同)。

在步驟1和2中單擊「替換文件」執行。

字符串\1,...,\5指的是連續節點的值(在正則表達式中括號中的值)。把它放在或離開它,並添加任何你想要的任意文本。 (.*?)是一個匹配任何字符的正則表達式,並且是不明確的(?代表不可靠性),所以它只會匹配最短的片段(否則它可能會比您在文件中發現的字符數更少)。