如何使用sed获取xml的两个标签的值 [英] how to get value of two tags of xml using sed

查看:118
本文介绍了如何使用sed获取xml的两个标签的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 xml 文件,我想获取一些标签的值.XML 如下所示:

I have an xml files and I want to fetch the values of some tags. XML is something like this given below:

<?xml version="1.0" standalone = "no"?>
<!DOCTYPE handover_list PUBLIC"EN""h">
<X1>
<X2>
<X3>USA</X3>
<date_time>20170813T18:18-04:00</date_time>
<id action="I">XXXXXXXXXXXXXX</id>
<id action="I">YYYYYYYYYYYYYY</id>
<id action="I">ZZZZZZZZZZZZZZ</id>
</X2>
<X2>
<X3>UAE</X3>
<date_time>20160814T15:15-03:04</date_time>
<id action="I">AAAAAAAAAAAAAA</id>
<id action="I">BBBBBBBBBBBBBB</id>
<id action="I">CCCCCCCCCCCCCC</id>
</X2>
</X1>

我正在使用的是:

sed -n 's:.*<X3>\(.*\)</X3>.*:\1:p' formated.xml
sed -n 's:.*<id action="I">\(.*\)</id>.*:\1:p' formated.xml

及其给定的输出如下:

USA
UAE
XXXXXXXXXXXXXX
YYYYYYYYYYYYYY
ZZZZZZZZZZZZZZ
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
CCCCCCCCCCCCCC

我想要的是合并上面使用的两个 sed 命令,以便我可以得到这样的输出:

What I want is to merge both the sed commands used above so that I can get the output like this:

USA
XXXXXXXXXXXXXX
YYYYYYYYYYYYYY
ZZZZZZZZZZZZZZ
UAE
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
CCCCCCCCCCCCCC

推荐答案

正确的方法是使用 xml 解析器,例如 xmlstarlet:

The right way is using xml parsers like xmlstarlet:

在这种情况下, 标签是多余的.

In such case, <DOCTYPE ..> tag is redundant.

xmlstarlet sel -t -v '//X2/*[not(self::date_time)]' -n formated.xml

输出:

USA
XXXXXXXXXXXXXX
YYYYYYYYYYYYYY
ZZZZZZZZZZZZZZ
UAE
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
CCCCCCCCCCCCCC

这篇关于如何使用sed获取xml的两个标签的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆