Как найти свойства, содержащие соответствующий шаблон, используя xmllint - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь извлечь значение в сценарии оболочки, используя xmllint, я смог найти и извлечь значения, сопоставив полные строки ключей. Проблема для некоторых значений, я просто знаю, с чего начинается ключ. Например: пусть часть 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 Ответ

1 голос
/ 24 апреля 2019

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>
...