我可以通过一次调用XMLStarlet插入一个子元素,并且仍然具有正确的格式吗?

时间:2014-01-29 16:17:56

标签: xml xmlstarlet xml-formatting

我正在使用来自cellux的一个很棒的提示,在这个question的现有元素下添加一个新元素(带有属性和子元素),然后遇到格式化挑战。

从文件example.xml开始:

<processes>
  <process id="test"/>
</processes>

如果我使用cellux的方法多次调用xml并执行多个操作......

xml ed -L \
  -s "/processes" -t elem -n processTMP -v "" \
  -i "/processes/processTMP" -t attr -n id -v "test2" \
  -s "/processes/processTMP" -t elem -n subproc -v "s2" \
  -r "/processes/processTMP" -v "process" \
  example.xml

生成的文件包含一行新的XML。

<processes>
  <process id="test"/>
  <process id="test2"><subproc>s2</subproc></process>
</processes>

如果我在一个单独的调用中多次调用xml ...

xml ed -L -s "/processes" -t elem -n processTMP -v "" example.xml
xml ed -L -i "/processes/processTMP" -t attr -n id -v "test2" example.xml
xml ed -L -s "/processes/processTMP" -t elem -n subproc -v "s2" example.xml
xml ed -L -r "/processes/processTMP" -v "process" example.xml

我格式化(缩进)XML。

<processes>
  <process id="test"/>
  <process id="test2">
    <subproc>s2</subproc>
  </process>
</processes>

这两个文件在语法上是相同的,但我希望尽可能保持XML的清洁。

有没有人知道一个简单的方法来调用xml并仍然获得格式化? 我知道我最终可以通过“xml fo”运行它,但必须有更好的方法。

0 个答案:

没有答案