我正在使用命令:
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>
Run Code Online (Sandbox Code Playgroud)
在我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
Run Code Online (Sandbox Code Playgroud)
就是它创造了这个:
<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>
Run Code Online (Sandbox Code Playgroud)
知道确切的命令吗?
我尝试了这个命令,但它复制了所有应用程序标签
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
Run Code Online (Sandbox Code Playgroud)
基本上,您需要一个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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |