Shell

如何使用 xmllint 和 xpath 獲取匹配屬性的值列表?

  • November 15, 2014

我正在嘗試使用 xmllint 從配置文件中解析 Solr 核心的名稱。這有效:

xmllint --xpath /solr/cores/core/@name solr.xml |grep -Po '(?<=name=")[a-z-]+(?=")'

它返回如下內容:

core-a
core-b
...

這正是我想要的,但我想消除 grep。似乎應該只用 xpath 就可以做到這一點。如果沒有 grep,輸出如下所示:

name="core-a" name="core-b" ...

包裝表達式string()將多個輸出減少到第一個(即僅此core-a而已),這是沒有用的。如何將string函式應用於每個結果?

AFAIK,xmllint相當有限。但是你可以使用xmlstarlet它的sel命令來做你想做的事情。有關xmlstarlet sel --help用法和範例,請參閱。以您的範例為例,它將是:

xmlstarlet sel -T -t -m /solr/cores/core/@name -v . -n solr.xml

引用自:https://unix.stackexchange.com/questions/168083