我想转换这段xml:
<v1:table>
<v1:tr>
<v1:td>Apples</v1:td>
<v1:td>Bananas</v1:td>
</v1:tr>
</v1:table>
通过删除名称空间前缀(即v1
)并使用 sed 获得以下内容:
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
有可能吗?
编辑:我还想声明xml保存在文件中。
答案 0 :(得分:3)
您可以使用W3C HTML-XML-utils packaged for many distributions中的hxpipe
和hxunpipe
来完成此操作:
$ hxpipe infile | sed 's/^\([()]\)v1:/\1/g' | hxunpipe
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
hxpipe
解析XML / HTML并将其转换为awk / sed友好的基于行的格式:
$ hxpipe infile
(v1:table
-\n
(v1:tr
-\n
(v1:td
-Apples
)v1:td
-\n
(v1:td
-Bananas
)v1:td
-\n
)v1:tr
-\n
)v1:table
-\n
以(
和)
开头的行是开始和结束标记,因此从v1:
或(
开始的行中删除第一个)
是上面的sed命令所做的)达到了预期的效果。请注意,文本行以-
开头,因此不会出现任何误报。
答案 1 :(得分:1)
这个sed适用于你的例子:
sed -E 's~(</?)v1:~\1~g' file
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
然而,只是注意sed
不是解析HTML / XML的最佳工具。考虑使用HTML解析器。