Извлечение и дамп элементов с помощью xmlstarlet

Я ищу способ извлечь и распечатать элемент от моего xml, использующего xmlstarlet; например, если мой xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

Я хотел бы распечатать книжный элемент с ценой = 29.99 как:

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

Я понимаю запрос xpath для выбора такого элемента (/bookstore/book [price=29.99]), но я не могу печатать/выводить его на stdout. Если я использую '-v' опция и использую,-v (.) я не получаю вывод, как я хочу (со всеми тегами в нем), я просто получаю текстовые значения. Должен быть способ просто вывести выбранный элемент, как это, и это - то, что я ищу.

Спасибо в ожидании.

15
задан Carl Manaster 4 April 2013 в 20:55
поделиться

1 ответ

Using the "-c" (copy) option, should achieve what you're after:

xmlstarlet sel -t -c "/bookstore/book[price=29.99]" books.xml

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

You can watch the XSLT generated internally in xmlstarlet by adding the global "-C" switch after "sel". This shows how the copy option results in an xslt copy-of construct:

...
<xsl:template name="t1">
  <xsl:copy-of select="/bookstore/book[price=29.99]"/>
</xsl:template>
...

This results in namespace nodes, child nodes, and attributes nodes being included, cf. the XSLT spec (see w3schools summary).

18
ответ дан 1 December 2019 в 04:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: