我正在尝试使用XMLStarlet将文本字段添加到XML结构,但无法将其工作。这是我最接近的。

xmlstarlet edit --append "//foo/bar[@baz='qux']" -t text -n grault -v "garply" <<EOF
<foo>
   <bar baz="qux">
     <quux quuz="corge"/>
   </bar>
</foo>
EOF

这导致了:

<?xml version="1.0"?>
<foo>
  <bar baz="qux">
    <quux quuz="corge"/>
  </bar>garply
</foo>

我期待这一点:

<?xml version="1.0"?>
<foo>
  <bar baz="qux">
    <quux quuz="corge"/>
    <grault>garply</grault>
  </bar>
</foo>

有人可以赐教我关于我的方式的错误吗?

提前致谢。

分析解答

我假设你需要一个子节点:

xmlstarlet edit --subnode "//foo/bar" -t elem -n "grault" -v "garply" file.xml

输出:

<?xml version="1.0"?>
<foo>
  <bar baz="qux">
    <quux quuz="corge"/>
    <grault>garply</grault>
  </bar>
</foo>

请参阅:xmlstarlet edit.