正则表达式匹配没有标记名称的XML的起始节点

时间:2011-11-02 09:03:18

标签: xml regex

我喜欢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>

我应该在文本编辑器中使用哪些正则表达式替换并包含namesapace

我试图使用正则表达式[&lt;] [^ /],但它也选择了我不想替换的起始标记的第一个字符。

注意:在支持正则表达式替换的编辑器中,我有上述手动编辑的要求。我不打算以编程方式执行上述任务。请求的输出XML片段是完整XML的内部部分,因此未提及名称空间URI

3 个答案:

答案 0 :(得分:2)

使用此正则表达式替换:

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

答案 1 :(得分:1)

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



[user@serv:~/] cat tf | sed 's/\w*<\([\/]*\)/<\1ns:/'

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

答案 2 :(得分:0)

您请求的输出不是格式良好的XML(它具有未声明的命名空间前缀),并且您给出的正则表达式将产生该输出,这是无用的,因为没有期望XML的工具将能够处理它。这是使用正则表达式处理XML的原因之一。每次都使用XML处理工具,例如XSLT。