【问题标题】:Using Linux Bash Script to get data from XML file使用 Linux Bash 脚本从 XML 文件中获取数据
【发布时间】:2012-06-25 21:39:50
【问题描述】:

我有一个 XML 文件,其中包含我需要使用 Linux Bash 脚本提取的数据。例如,我需要括号中的所有内容并相应地在终端中打印出来(名字在第一个描述旁边)。

最好的方法是什么?我可以使用 C# 使用 XPath 来做到这一点,但我不能简单地使用 Linux Bash 脚本来做到这一点,对吗?我知道我可以使用 awk、sed、grep、cut 等完成大部分工作,但我认为(实际上我知道我没有)做得很好。我曾经将描述数据提取到文件中并将名称提取到文件中,但是几个小时后,我意识到这不是最好/正确的方法。

应该如何阅读的示例是。

  • 名称1 - 描述1
  • 名称2 - 描述2
  • name3 -(空白)
  • 名称4 - 描述3

谢谢!

如果我可以添加任何细节以使其更清晰,请告诉我! (工作一整天,大脑有点炸了)

示例 XML(将其简化为一个实例)

<zabbix_export>
<templates>
    <template>
        <items>
            <item>
                <name>Available memory</name>
                <description>Available memory is defined as free+cached+buffers memory.</description>                  
            </item>
        </items>
    </template>
<templates> 

应该如何读出:

<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
<name>Another Name</name> - <description>Another Description</description>
<name>Another Name</name> - <description>Another Description</description>
<name>Another Name</name> - <description>Another Description</description>

【问题讨论】:

  • 示例 XML 数据会很有用
  • 添加了 XML 的简化示例

标签: xml linux


【解决方案1】:

命令

xmlstarlet sel -t -m '//item/*' -c . -n input.xml |
    sed '2~2s/$/\n/' |
        awk -F'\n' -vRS='' '{print $1" - "$2}'

输出

<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>

【讨论】:

  • 所以,差不多了!!!我让它正常工作,但我的 XML 文件中的一些描述是空白的。有没有办法让它跳过空白描述以便正确显示?
【解决方案2】:

您可以从 bash 启动 xpath 命令。它与 Perl XML 一起安装,并允许您非常轻松地对标准输出进行任何 XPath 查询。

【讨论】:

  • 嗯,我一直试图让它在 Perl 中以这种方式工作,但我似乎无法让它工作(以前从未使用过 Perl)。我知道只需使用 Bash 脚本就可以让它像这样打印。
  • 我真的只想使用 Linux Bash Script 命令(不是 Perl 或任何东西)
  • @PolarisUser - 你真的做对了。 xpath 是一个命令行实用程序,可以直接从 Bash 运行。你只需要知道在哪个包中找到它,以防它没有预装在你的系统上,这对我来说是一个惊喜。
  • 好的,我现在使用 XPath 和 Perl 获得所有数据,但我似乎无法正确格式化它,就像我发布的那样:(
  • @PolarisUser - 如果遇到任何其他问题,您可以按照上一个问题(答案)返回:stackoverflow.com/questions/5629091/…
【解决方案3】:

如果xpath 可执行文件没有安装,你可以这样安装:

cpan XML::XPath

这应该下载必要的 Perl 模块,并安装 xpath 二进制文件。

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2019-02-13
    • 2023-03-19
    • 2021-03-10
    • 1970-01-01
    相关资源
    最近更新 更多