我有一个像这样的 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)
但显然我犯了一些错误,因为它不起作用。有人可以建议任何其他方式吗?
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 的全部内容)
归档时间: |
|
查看次数: |
2938 次 |
最近记录: |