2012-07-23 3 views
1

삽입 : 그러나xmlstarlet 내가 명령을 사용하고 태그

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 

답변

4

는 기본적으로, 당신은 당신이 방금 삽입 한 노드에 맞게 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 
+0

감사합니다. 완벽하게 작동했습니다! 나는 정말로 당신의 대답에 감사한다 :) 나는 1 일 동안 이것을 걸었다. –

관련 문제