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

Ada*_*tan 4 sed xml

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

  ...
  <serverName someKey="false" anotherKey="0.05" thirdKey="0.04">
    <default>blah.blah.blah</default>
    <region name="US">us.blah.net</region>
    <region name="EU">eu.blah.net</region>
    <region name="IL">il.blah.net</region>
  </serverName>
  ...
Run Code Online (Sandbox Code Playgroud)

如何打印开始标签<serverName ...>和结束标签之间的线条</serverName>

Oli*_*Oli 5

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

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

sudo apt-get install libxml-xpath-perl
Run Code Online (Sandbox Code Playgroud)

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

xpath -e '*/serverName/*' big_xml_file.xml
Run Code Online (Sandbox Code Playgroud)

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