xmlstarlet:如何使用现有值添加元素

时间:2019-02-23 11:03:06

标签: xml xmlstarlet

开始
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>a feed</title>
    <link>https://afeed</link>
    <description>lorem ipsum</description>
    <item>
      <title>lorem ipsum</title>
      <description>lorem ipsum des</description>
      <pubDate>Sat, 23 Feb 2019 10:50:00 GMT</pubDate>
      <dc:date>2019-02-23T10:50:00Z</dc:date>
    </item>
    <item>
      <title>lorem ipsum sit</title>
      <description>lorem ipsum sit des</description>
      <pubDate>Sat, 23 Feb 2019 10:49:00 GMT</pubDate>
      <dc:date>2019-02-23T10:49:00Z</dc:date>
    </item>
  </channel>
</rss>

我可以使用添加元素

xmlstarlet edit --omit-decl \
    --subnode '//item' --type elem --name myelement --value myvalue \
input.xml

但是如何将另一个元素的值用作值元素? 在示例中使用

xmlstarlet edit --omit-decl \
    --subnode '//item' --type elem --name myelement --value //item/pubDate \
input.xml

我将//item/pubDate作为值,但是我想为每个项目插入//item/pubDate值。

谢谢

1 个答案:

答案 0 :(得分:0)

添加一个空子节点,然后使用\\(,\\)和一个相对路径创建其内容。 --update可以将xpath与--update一起使用。

--expr

请参阅:xmlstarlet edit --omit-decl \ --subnode '//item' --type elem --name myelement \ --update '//item/myelement' --expr '../pubDate/text()' input.xml