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

The*_*ght 1 xml 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>
Run Code Online (Sandbox Code Playgroud)

现在我需要从这个 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
Run Code Online (Sandbox Code Playgroud)

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

uml*_*ute 5

sed/awk真的是关于正则表达式在 stackoverflow 上检查这个答案为什么用正则表达式解析 HTML/XML 是一个主意。

对于 XML,您确实需要构建文档的 DOM,然后找到您的信息。有像xmlstar这样的cmdline 工具可以让您从 XML 文档中获取信息。

但不要尝试使用 sed/awk 来解析 XML

PS:当然,你也许可以创建一个简单的正则表达式,它可以提取你在现实生活中碰巧遇到的文件所需的信息。例如,以下将打印文档的第 5 行,其中(在您的示例中)包含相关信息。

# stupid and naive approach:
sed '5!d' MyXML.xml
Run Code Online (Sandbox Code Playgroud)

但这对文件的布局做出了假设,这与 XML无关。它可能适用于给定文件的非常特定的生成器,但不能保证适用于任何遵循相同结构的XML 文件(结构化数据就是 XML 的全部内容)