使用 xmlstarlet 创建新元素

使用 xmlstarlet 创建新元素

我一直在尝试向 XML 文件添加新元素。

原始文件:

<levela>
  <levelb>
  </levelb>
</levela>

我试图得到以下结果:

<levela>
  <levelb>
    <levelc>
      <element1>value1</element1>
      <element2>value2</element2>
      <element3>value3</element3>
    </levelc>
  </levelb>
</levela>

我目前的尝试是:

xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
    -i //levelc -t elem -n "element1" -v "value1" \
    file.xml

但我的文件没有更新。

答案1

您的调用中有一个拼写错误xmlstarlet( lelvelb):

xmlstarlet ed -a /levela/lelvelb -t elem -n levelc -v "" \
    -i //levelc -t elem -n "element1" -v "value1" \
    file.xml

要添加子节点,您需要使用-s操作,而不是-aor -i

xmlstarlet ed -s /levela/levelb -t elem -n levelc -v "" \
    -s //levelc -t elem -n "element1" -v "value1" \
    file.xml

这会产生

<?xml version="1.0"?>
<levela>
  <levelb>
  <levelc><element1>value1</element1><element2>value2</element2></levelc></levelb>
</levela>

您可以-s根据需要添加其他操作。您也可以删除 的空-vlevelc

如果您想修改自身,而不是在标准输出file.xml上获取转换结果,请将选项添加到:xmlstarlet-Led

xmlstarlet ed -L -s /levela/levelb -t elem -n levelc -v "" \
    -s //levelc -t elem -n "element1" -v "value1" \
    file.xml

相关内容