从搜索结果中获取XML整个元素
我有一堆XML文件,每个文件的格式从搜索结果中获取XML整个元素,xml,perl,search,grep,Xml,Perl,Search,Grep,我有一堆XML文件,每个文件的格式 <?xml version="1.0" encoding="UTF-8"?> <A> <R> <B></B> <Q></Q> <U></U> </R> ... </A> ... 我需要在每个字符串中搜索字符串,并返回整个元素“R”。问题是有带字符串的新行
<?xml version="1.0" encoding="UTF-8"?>
<A>
<R>
<B></B>
<Q></Q>
<U></U>
</R>
...
</A>
...
我需要在每个字符串中搜索字符串,并返回整个元素“R”。问题是有带字符串的新行,所以我不能使用grep-bn-ann,因为每个搜索结果前后的行数可能不同
例如,给定以下内容
<?xml version="1.0" encoding="UTF-8"?>
<A>
<R>
<B>abc</B>
<Q>0123</Q>
<U>xyz</U>
</R>
<R>
<B>
qwe
rty
yui
</B>
<Q>0123</Q>
<U>
zxc
abc
</U>
</R>
<R>
<B>lkj</B>
<Q>
lkjhgfdsa
wer
</Q>
<U>
poixyz
zaq
</U>
</R>
</A>
abc
0123
xyz
qwe
蒂
尤伊
0123
zxc
abc
列车运行监控装置
lkjhgfdsa
wer
波西兹
扎克
如果我对“xyz”进行grep,那么我需要
<R>
<B>abc</B>
<Q>0123</Q>
<U>xyz</U>
</R>
<R>
<B>lkj</B>
<Q>
lkjhgfdsa
wer
</Q>
<U>
poixyz
zaq
</U>
</R>
abc
0123
xyz
列车运行监控装置
lkjhgfdsa
wer
波西兹
扎克
我不反对使用其他工具,如perl、egrep等。。。要做到这一点。非常感谢您提供的任何帮助。是的,可以用Perl完成,例如使用以下附带的
xpath
可执行文件:
或者使用另一种选择,例如我的(此网站不允许我链接到它),它基于:
另一个选择是:
附言:这些只是daxim答案的替代品。
我不知道xml_grep2,我会马上安装它!
要点是在这里使用XPath是个好主意。学习和使用
$xml\u grep2-x'/*[text()[contains(string(.),“xyz”)]]/祖先::R'nvanwyen.xml
abc
0123
xyz
列车运行监控装置
lkjhgfdsa
wer
波西兹
扎克
这两种解决方案都无法正常工作。两者似乎都不会产生任何结果。。。一定是我。
xpath a.xml '//R[.//*[contains(text(),"xyz")]]'
xpath-rp -e '//R[.//*[contains(text(),"xyz")]]' a.xml
xmlstarlet sel -t -c '//R[.//*[contains(text(),"xyz")]]' a.xml
$ xml_grep2 -x '//*[text()[contains(string(.),"xyz")]]/ancestor::R' nvanwyen.xml
<R>
<B>abc</B>
<Q>0123</Q>
<U>xyz</U>
</R>
<R>
<B>lkj</B>
<Q>
lkjhgfdsa
wer
</Q>
<U>
poixyz
zaq
</U>
</R>