xmllint Поиск значения тега на основе имени тега в документе xml

Я пытаюсь извлечь значение из документа xml, используя xmlint. но структура xml следующая.

    <configuration> 
    <property>
    <name>hive.exec.reducers.max</name>
    <value>999</value>

    <description>max number of reducers will be used. If the one
        specified in the configuration parameter mapred.reduce.tasks is
        negative, hive will use this one as the max number of reducers when
        automatically determine number of reducers.</description>


      </property>

  <property>

    <name>hive.cli.print.header</name>
    <value>false</value>

    <description>Whether to print the names of the columns in query output.</description>


  </property>
  <property>

<name>hive.cli.print.current.db</name>

    <value>false</value>

    <description>Whether to include the current database in the hive prompt.</description>


  </property>
</configuration>

Допустим, я хочу получить значение hive.cli.print.current.db, вывод должен быть «ложным». Как можно использовать xmlint для извлечения значения из заданного тега имени в документе xml.


person Ozzie Ghani    schedule 30.06.2015    source источник


Ответы (1)


Следующий запрос xpath должен работать.

xmllint --xpath "//property[name[text()='hive.cli.print.current.db']]/value/text()" file.xml

Перевод:

Найти элемент свойства, который содержит дочерний узел (имя) с заданным текстом, и вернуть текст, содержащийся в другом дочернем узле (значение).

person tvm    schedule 30.06.2015
comment
Здравствуйте, сэр, есть ли другой способ сделать это, но без xpath, так как установленная версия xmllint не предлагает xpath в качестве одного из доступных вариантов. и поскольку мне нужно запустить сценарий для всего кластера, я не думаю, что запрос на обновление будет выполнен только потому, что я так сказал .... Спасибо :-) - person Ozzie Ghani; 30.06.2015
comment
Вы можете попробовать что-то вроде: echo "cat //property[name[text()='hive.cli.print.current.db']]/value" | xmllint --shell file.xml, который будет иметь дополнительный вывод, но вы можете легко удалить/отфильтровать его, используя sed или grep. - person tvm; 30.06.2015