xmlstarlet: как добавить элемент, используя значение существующего - PullRequest
0 голосов
/ 23 февраля 2019

начиная с

<?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 голосов
/ 23 февраля 2019

Добавьте пустой подузел, а затем создайте его содержимое с --update и относительным путем.--update имеет возможность использовать xpath с --expr.

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

См .: xmlstarlet edit

...