0

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

我怎么能用awkor 来做呢sed

我以这种方式尝试过:

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

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

4

2 回答 2

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删除了前导和尾随空格。

于 2013-09-19T12:20:08.350 回答
1

您可能想查看 xmlstarlet ( http://xmlstar.sourceforge.net/ )。xmlstarlet 是一个命令行 xml 工具包。xmlstarlet 允许您将 xml 转换为 pyx 格式。pyx 本质上是一个扁平化的 xml 表示,每个标签一行。然后你可以使用 grep、sed 等来提取你想要的东西。

于 2013-09-19T12:21:30.577 回答