2011-11-02 51 views
2

我有XML喜歡正則表達式匹配XML的起始節點沒有標籤名稱

<A> 
<B> 
    <C> 
    Hello World 
    </C> 
</B> 
</A> 

我想更換起始標籤的"<" with "<ns:",導致下面的XML

<ns:A> 
<ns:B> 
    <ns:C> 
    Hello World 
    </ns:C> 
</ns:B> 
</ns:A> 
每個標籤

應該是什麼我應該在文本編輯器中使用正則表達式來替換幷包含名稱空間

我試圖使用正則表達式[^ /],但它選擇了第e也是我不想替換的起始標籤的第一個字符。

注意:在支持正則表達式替換的編輯器中,我有上述手動編輯的要求。我不打算做編程上述任務。而要求輸出XML片段是完整的XML的內部,因此命名空間URI沒有提到

回答

2

使用這個表達式替換:

regex: (</?) 
replacement: $1ns: 
+0

謝謝,它的工作 – SoulMan

1
cat tf 
<A> 
<B> 
    <C> 
    Hello World 
    </C> 
</B> 
</A> 



[[email protected]:~/] cat tf | sed 's/\w*<\([\/]*\)/<\1ns:/' 

<ns:A> 
<ns:B> 
    <ns:C> 
    Hello World 
    </ns:C> 
</ns:B> 
</ns:A> 
0

您請求的輸出不是格式良好的XML(它有一個未聲明的名稱空間前綴),並且您得到的正則表達式將生成該輸出,這是無用的,因爲沒有期望XML的工具將能夠處理它。這是爲什麼用正則表達式處理XML是一個壞主意的原因之一。每次使用XML處理工具(例如XSLT)。

+0

謝謝邁克爾,上述要求是爲手動編輯purpose.for程序轉換我會使用XML處理工具。我編輯了這個問題,並在問題底部的註釋中添加了相同的內容。 – SoulMan