gpt4 book ai didi

xml - 带有 XPATH 的 Linux Bash XMLLINT

转载 作者:IT王子 更新时间:2023-10-28 23:59:17 25 4
gpt4 key购买 nike

今天我要学习如何正确使用 xmllint。它似乎没有得到很好的涵盖或解释。我打算使用单一语言资源文件来运行我的整个系统。我有必须从此语言文件读取的 bash 脚本和 php 页面的混合体。

目前我在我的 xml 文件 en.xml 中使用以下格式:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<item id="index.php">
<label>LABEL</label>
<value>VALUE</value>
<description>DESCRIPTION</description>
</item>
<item id="config.php">
<label>LABEL</label>
<value>VALUE</value>
<description>DESCRIPTION</description>
</item>

</resources>

现在我需要从一个 bash 脚本行开始,它应该从 xml 文件中提取数据值。例如我想获得 DESCRIPTION 的值来自 index.php项目。

我在用

xmllint --xpath 'string(//description)' /path/en.xml

对于一个有效的不同布局,但现在我正在更改我的 xml 文件的布局,我不知道如何最好地定位特定的 <item>然后在 bash 脚本中深入到它的子元素。

有人可以帮忙 xmllint --xpath请行获取此值?

最佳答案

how best to target a specific and then drill down to its child element

正确的 XPath 表达式是:

/resources/item[@id="index.php"]/description/text()

用简单的英语来说:从文档节点开始,到文档元素 resources,再到它的子 item,但前提是 id 的值 属性是“index.php”,在其子 description 上并检索其文本值。

我使用 xmllint 来验证 XML 文档,但从不用于路径表达式。在 bash shell 中(至少在 Mac OS 中)有一个更简单的工具来评估 XPath 表达式,称为“xpath”:

$ xpath en.xml '/resources/item[@id="index.php"]/description/text()'

然后得到如下结果:

Found 1 nodes:
-- NODE --
DESCRIPTION

如果您仍然喜欢 xmllint,请按以下方式使用它:

$ xmllint --xpath '/resources/item[@id="index.php"]/description/text()' en.xml > result.txt

默认情况下,--xpath 意味着 --noout,这会阻止 xmllint 输出输入的 XML 文件。为了使输出更具可读性,我将输出重定向到一个文件。

$ cat result.txt 
DESCRIPTION

关于xml - 带有 XPATH 的 Linux Bash XMLLINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26709071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com