使用xmlstarlet提取和转储元素

前端之家收集整理的这篇文章主要介绍了使用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(.)我没有得到输出,我想要的(所有的标签),我只是得到的文本值.应该有一种方法来简单地转储选定的元素,这就是我正在寻找的.

感谢预期.

使用“-c”(复制)选项,应该达到你以后的目的:
xmlstarlet sel -t -c "/bookstore/book[price=29.99]" books.xml

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

您可以通过在“sel”之后添加全局“-C”开关来观看xmlstarlet内部生成的XSLT.这显示了copy选项如何生成一个xslt的构造:

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

这将导致命名空间节点,子节点和属性节点被包括在内. XSLT规格(see w3schools summary).

猜你在找的XML相关文章