xmlstarlet:如何使用现有元素的值添加元素
xmlstarlet: how to add element, using value of existing one
从
开始
<?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
值。
谢谢
添加一个空子节点,然后使用 --update
和相对路径创建其内容。 --update
可以使用带有 --expr
的 xpath。
xmlstarlet edit --omit-decl \
--subnode '//item' --type elem --name myelement \
--update '//item/myelement' --expr '../pubDate/text()' input.xml
参见:xmlstarlet edit
从
开始<?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
值。
谢谢
添加一个空子节点,然后使用 --update
和相对路径创建其内容。 --update
可以使用带有 --expr
的 xpath。
xmlstarlet edit --omit-decl \
--subnode '//item' --type elem --name myelement \
--update '//item/myelement' --expr '../pubDate/text()' input.xml
参见:xmlstarlet edit