在两个XML标记之间打印文本

请考虑以下大型XML文件的摘录:

...  blah.blah.blah us.blah.net eu.blah.net il.blah.net  ... 

如何打印开始标记和结束标记

sed是一个很棒的工具,但XML最终会让任何接近它的程序员都用REGEX来呐喊。 我知道。 我去过那儿。 如果您的数据发生变化的可能性甚至最小,那么您需要一个合适的XML解析器。

我的选择是使用BeautifulSoup,但它很难直接从Bash处理它。 如果你想编写一个中间Python脚本,那仍然是一个选项……否则xpath是一个相当经典的选择。 它是Perl的libxml库的包装器,它做了一些相当强大的function。

 sudo apt-get install libxml-xpath-perl 

对于您的示例,以下是我在xpath查询语言中执行此操作的方法 :

 xpath -e '*/serverName/*' big_xml_file.xml 

同样,如果你需要对这个XML做任何有用的事情,可以考虑像BeautifulSoup和Python这样更强大的东西。

 sed -n '/ 

诀窍(改编自linuxquestions.org上的这篇文章 )。

在Ubuntu 14.04上:

 $ sed -n '/ blah.blah.blah us.blah.net eu.blah.net il.blah.net  

我还可以想象您需要根据某些给定的条件路径从较长的列表中找到特定的服务器以及特定的设置或区域。

在这种情况下,我建议将XPATH语句和条件包装在XSLT样式表中。 存储库中有许多XSLT解析器可用于命令行,PHP,Perl,Python,Java等。

XSLT非常强大,可以输出text,xml和html。