我有一个XML文件(MyXML.xml),如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns3:GetAllInfoFromRest xmlns:ns2="http://com.lanuk.cfe/b2_7/service/objects" xmlns:ns3="http://com.lanuk.cfe/b2_7/service/operations">
1111,GH43567,Hamburger,GET,278598655,\n000001, ,Kunal,Bhyuo,Ramond,856 K. 98 Rd, , ,Tripura,AGT,INDIA,856987, ,S,S,S,8956,\666666
</ns3:GetAllInfoFromRest>
</S:Body>
</S:Envelope>
现在我需要从此xml中删除SOAP内容和所有标记属性,并仅获取字符串响应1111,GH43567,Hamburger,GET,278598655,\n000001, ,Kunal,Bhyuo,Ramond,856 K. 98 Rd, , ,Tripura,AGT,INDIA,856987, ,S,S,S,8956,\666666
。
如何使用awk
或sed
?
我用这种方式试了一下:
$ xgawk -lxml 'XMLATTR["xmlns:ns3"]=="http://com.lanuk.cfe/b2_7/service/operations"{print $2}' MyXML.xml
但显然我犯了一些错误,因为它不起作用。 有人可以提出任何其他方法吗?
答案 0 :(得分:2)
使用awk
awk '{gsub(/<[^>]*>/,"")}NF{$1=$1;print}' file.xml
1111,GH43567,Hamburger,GET,278598655,\n000001, ,Kunal,Bhyuo,Ramond,856 K. 98 Rd, , ,Tripura,AGT,INDIA,856987, ,S,S,S,8956,\666666
gsub
部分替换以<
开头并以>
结尾的所有内容,因此eks <S:Body> is removed.
NF
只打印出包含数据的行,删除空白线。 $1=$1
删除了前导和尾随空格。
答案 1 :(得分:1)
您可能需要查看xmlstarlet(http://xmlstar.sourceforge.net/)。 xmlstarlet是一个命令行xml工具包。 xmlstarlet允许您转换 将xml转换为pyx格式。 pyx本质上是一个扁平的xml表示,每个标记一行。 然后你可以使用grep,sed等来提取你想要的东西。