如何使用xmllint

时间:2019-04-24 11:14:07

标签: regex bash shell xmllint

我正在尝试使用xmllint在shell脚本中提取值,我能够通过匹配完整的键串来查找和提取值。 问题是对于某些值,我只知道键以什么开头。 例如:让xml的一部分为:

<property>
    <name>foo.bar.random_part_of_name</name>
    <value> SOME_VALUE</value>
 </property>

我要提取整个段,并将其写入输出文件。

到目前为止,我已经能够匹配完整的细分受众群

if (xmllint --xpath '//property[name/text()="foo.bar"]/value/text()' "$INPUT_FILE"); then
  value=$(xmllint --xpath '//property[name/text()="foo.bar"]/value/text()' "$INPUT_FILE")
  echo "<property><name>foo.bar</name><value>$value</value></property>">> $OUTPUT_FILE
fi

预先感谢

1 个答案:

答案 0 :(得分:1)

Xpath 1.0提供了start-with(node, pattern)功能来完成您想要的

name="foo.bar"
value=$(xmllint --xpath "//property[starts-with(name,'$name')]/value/text()" test.xml)
if [ -n "$value" ]; then
  echo "<property><name>$name</name><value>$value</value></property>"
fi

结果:

<property><name>foo.bar</name><value> SOME_VALUE</value></property>