【发布时间】:2010-12-20 04:21:22
【问题描述】:
我需要查找并替换特定 xml 元素的值。条件如下:
- 元素enabled的值必须从0改为1;
- enabled 必须是 somenode 元素的子元素
我的测试 xml 如下所示:
<somenode name="node1">
<some></some>
<enabled>0</enabled>
<some></some>
</somenode>
<someothernode name="node2">
<some></some>
<enabled>0</enabled>
<some></some>
</someothernode>
<somenode name="node3">
<some></some>
<enabled>0</enabled>
<some></some>
</somenode>
我希望第一个和第三个 enabled 元素会被更改。到目前为止,我已经设法编写了这个 sed 命令:
sed -n "1h;1!H;${;g;s|\(<somenode [^>]*>\)\(.*\)\(<enabled>\s*\)0\(\s*</enabled>\)\(.*</somenode>\)|\1\2\3 1 \4\5|g;p;}" test.xml
但它只改变了最后一个,我相信这是由于贪婪匹配。 任何帮助将不胜感激。
【问题讨论】:
-
我猜任何带有 XML 解析库的动态语言(Perl、Python、PHP、Ruby)都会比 sed 更好地完成这项任务,您使用螺丝刀吃汤有什么特别的原因吗?
-
看看stackoverflow.com/questions/91791/…——那里提到了很多工具。