如何使用Unix Sed / Awk找出XML文件的内容?

时间:2013-09-19 12:11:43

标签: unix xml-parsing sed awk

我有一个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

如何使用awksed

进行操作

我用这种方式试了一下:

$ xgawk -lxml 'XMLATTR["xmlns:ns3"]=="http://com.lanuk.cfe/b2_7/service/operations"{print $2}' MyXML.xml

但显然我犯了一些错误,因为它不起作用。 有人可以提出任何其他方法吗?

2 个答案:

答案 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等来提取你想要的东西。