projec-6ren">
gpt4 book ai didi

xmlstarlet 插入标签

转载 作者:行者123 更新时间:2023-12-02 22:34:41 25 4
gpt4 key购买 nike

我正在使用命令:

xmlstarlet ed --omit-decl --subnode "/boinc"--type elem -n app -v ""project_00.xml > project_01.xml

但是,我想在其中插入两个标签:

<app>
<name>name</name>
<nikname>nikname</nikname>
</app>

在我的 project_00.xml 中,我已经有其他标签应用程序并且它导致了冲突。

这个命令的问题:

xmlstarlet ed --subnode "/boinc" --type elem -n app -v "" project_00.xml|     xmlstarlet ed --subnode //app --type elem -n name -v "newApp"| xmlstarlet ed --subnode //app --type elem -n user_friendly_name -v "New.App" > project_01.xml

是它创造了这个。:

  <app name="wilson">
<name>wilson</name>
<user_friendly_name>Mr.Wilson</user_friendly_name>
<name>newApp</name>
<user_friendly_name>New.App</user_friendly_name>
</app>
<app>
<name>newApp</name>
<user_friendly_name>New.App</user_friendly_name>
</app>

知道确切的命令吗?

我试过这个命令,但它复制了所有应用标签

xmlstarlet ed -s "/boinc" -t elem -n app -v "" -s "/boinc/app" -t elem -n name -v "name" -s "/boinc/app" -t elem -n user_friendly_name -v "New.App" project_00.xml > project_01.xml

最佳答案

基本上,您需要一个 XPath 表达式来匹配您刚刚插入的节点;因为 --subnode 总是将新的子节点放在最后,您可以使用 /boinc/app[last()]:

xmlstarlet ed \
--subnode /boinc --type elem -n app -v '' \
--subnode '/boinc/app[last()]' --type elem -n name -v newApp \
--subnode '/boinc/app[last()]' --type elem -n user_friendly_name -v New.App \
project_00.xml > project_01.xml

关于xmlstarlet 插入标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11618715/

25 4 0