如何使用 xmllint 查找包含匹配特定模式的属性
How to find properties containing matching certain pattern using 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
提前致谢
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>
我正在尝试使用 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
提前致谢
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>