Моего XML:XMLStarlet - удалить XML элемент - сценарии оболочки
<?xml version='1.0' encoding='UTF-8'?>
<mm2-moduleset plugin="[email protected]">
..
<buildType class="hudson.mm.MMModuleSet$Component">
<viewableName>Component</viewableName>
</buildType>
<selectedCodeComponents>
<string>admin-content</string>
<string>admin</string>
</selectedCodeComponents>
<incrementalBuild>false</incrementalBuild>
...
...
</mm2-moduleset>
</xml>
В принципе, им пытается получить сведение о задании из Дженкинс-консоли плагина, и обновить конфигурацию файла XML (конфигурацию задание jenkins), а затем обновить задание jenkins, используя shell-script.
Для этого мне нужно заменить значения атрибутов «string» атрибута «selectedCodeComponents» в соответствии с пользовательским вводом с использованием сценария оболочки. если вход чек, чек-контент, банк, затем
<selectedCodeComponents>
<string>check-content</string>
<string>check</string>
<string>bank</string>
</selectedCodeComponents>
Мой код:
${JAVA_HOME}/bin/java -Djavax.net.ssl.trustStore=${JENKINS_HOST}.keystore -Djavax.net.ssl.trustStorePassword=112012 -jar ./jenkins-cli.jar -s https://$USERNAME:$API_TOKEN\@$JENKINS_HOST:$JENKINS_PORT\/jenkins get-job job_1 > job1.xml
(Jenkins-кли - Get-Job возвращает конфигурации в XML-файле)
Я думал первого удаления элементов строки в выбранных компонентах и добавления с тем, что дает пользователь. Подобно этому,
xmlstarlet ed -d "mm2-moduleset/selectedCodeComponents/string" abc.xml
// some logic
xmlstarlet ed -a "mm2-moduleset/selectedCodeComponents/string" --type elem -n string -v "something" abc.xml
Но после выполнения первой команды (XMLStarlet ред -d), она удаляет seletedcodecomponents, а также. Но я хотел удалить в нем только строковые элементы.
<?xml version='1.0' encoding='UTF-8'?>
<mm2-moduleset plugin="[email protected]">
..
<buildType class="hudson.mm.MMModuleSet$Component">
<viewableName>Component</viewableName>
</buildType>
</selectedCodeComponents>
<incrementalBuild>false</incrementalBuild>
...
...
</mm2-moduleset>
</xml>,
команду Append также добавление в два раза. (XMLStarlet ред -a) Для еи
xmlstarlet ed -a "mm2-moduleset/selectedCodeComponents/string" --type elem -n string -v "check" abc.xml
<?xml version='1.0' encoding='UTF-8'?>
<mm2-moduleset plugin="[email protected]">
..
<buildType class="hudson.mm.MMModuleSet$Component">
<viewableName>Component</viewableName>
</buildType>
<selectedCodeComponents>
<string>admin-content</string>
<string>check</string>
<string>admin</string>
<string>check</string>
</selectedCodeComponents>
<incrementalBuild>false</incrementalBuild>
...
...
</mm2-moduleset>
</xml>
могли бы вы сказать мне, как удалить только строковые элементы внутри selectedcodecomponents элемента и поэтому добавление команда добавляет в два раза
Я новичок в сценарий оболочки, следовательно, ваши предложения помогли бы мне
Привет, Джекман, спасибо за ваш вклад. но могу ли я знать, почему вы добавляете корневой тег? –
Вы не указали xml-файл в команде xmlstarlet subnode? в чем разница между моим кодом и этим кодом? и я не уверен, как результат будет отличаться.возможно, пожалуйста, объясните, –
'' не является элементом, это объявление, поэтому закрытие '' недействительно - тест с 'xmlstarlet validate file.xml' –