Dav*_*ani 2 xml curl xml-parsing
我正在尝试过滤此代码之间的数据 <cookie>与</cookie>和之间的数据account-id="和"(尾随报价)
<?xml version="1.0" encoding="utf-8"?>
<results>
<status code="ok"/>
<common locale="en" time-zone-id="85">
<cookie>na3breezfxm5hk6co2kfzuxq</cookie>
<date>2012-11-11T16:26:52.713+00:00</date>
<host>http://meet97263421.adobeconnect.com</host>
<local-host>pacna3app09</local-host>
<admin-host>na3cps.adobeconnect.com</admin-host>
<url>/api/xml?action=common-info</url>
<version>8.2.2.0</version>
<tos-version>7.5</tos-version>
<product-notification>true</product-notification>
<account account-id="1013353222"/>
<user-agent>curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5</user-agent>
</common>
</results>
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
编辑
这是我运行的curl命令,用于返回上面的xml.
curl -s http://meet97263421.adobeconnect.com/api/xml?action=common-info
Run Code Online (Sandbox Code Playgroud)
一般来说,正则表达式(因此grep)并不适合解析XML,但是如果你能保证输入格式良好且一致,你可以使用grepperl风格的正则表达式(在grep具有的系统上)最容易实现.他们):
grep -oP '(?<=<cookie>).*?(?=</cookie>)'
grep -oP '(?<=account-id=").*?(?=")'
Run Code Online (Sandbox Code Playgroud)
如果你想在同一个命令中使用它们,你可以用a分隔它们|,但是你必须告诉哪些匹配.
grep -oP '(?<=<cookie>).*?(?=</cookie>)|(?<=account-id=").*?(?=")'
Run Code Online (Sandbox Code Playgroud)
正如@Kevin 所述,正则表达式不适合解析 XML。
更好的方法是使用xmllint程序,该程序应用 xpath 表达式,如下所示:
$ xmllint --xpath "string(/results/common/cookie)" data.xml
na3breezfxm5hk6co2kfzuxq
$ xmllint --xpath "string(/results/common/account/@account-id)" data.xml
1013353222
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5314 次 |
| 最近记录: |