繁体   English   中英

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

[英]How to find out the content of a XML file using Unix 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

但是很明显,我由于它无法正常工作而犯了一些错误。 有人可以提出其他解决办法吗?

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

您可能需要研究xmlstarlet( http://xmlstar.sourceforge.net/ )。 xmlstarlet是命令行xml工具包。 xmlstarlet允许您将xml转换为pyx格式。 pyx本质上是扁平化的xml表示形式,每个标记一行。 然后,您可以使用grep,sed等提取所需的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM