- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 XML:
<?xml version='1.0' encoding='UTF-8'?>
<mm2-moduleset plugin="mm2-plugin@2.27.0-SNAPSHOT">
..
<buildType class="hudson.mm.MMModuleSet$Component">
<viewableName>Component</viewableName>
</buildType>
<selectedCodeComponents>
<string>admin-content</string>
<string>admin</string>
</selectedCodeComponents>
<incrementalBuild>false</incrementalBuild>
...
...
</mm2-moduleset>
基本上,我试图从 jenkins-cli 插件获取作业详细信息,并更新 xml 文件的配置(jenkins 作业的配置),然后使用 shell 脚本更新 jenkins 作业。
为此,我需要使用 shell 脚本根据用户输入替换“selectedCodeComponents”属性的“string”属性值。如果输入是支票、检查内容、银行,则
<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-cli - get-job 返回 xml 文件中的配置)
我想首先删除 selectedcodecomponents 中的字符串元素,然后追加用户提供的内容。像这样,
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 ed -d) 之后,它也会删除选定的代码组件。但我只想删除其中的字符串元素。
<?xml version='1.0' encoding='UTF-8'?>
<mm2-moduleset plugin="mm2-plugin@2.27.0-SNAPSHOT">
..
<buildType class="hudson.mm.MMModuleSet$Component">
<viewableName>Component</viewableName>
</buildType>
</selectedCodeComponents>
<incrementalBuild>false</incrementalBuild>
...
...
</mm2-moduleset>
追加命令也追加两次。(xmlstarlet ed -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="mm2-plugin@2.27.0-SNAPSHOT">
..
<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>
你能告诉我如何只删除 selectedcodecomponents 元素中的字符串元素以及为什么 append 命令追加两次
我是 shell 脚本的新手,因此您的建议会对我有所帮助
最佳答案
稍微修正一下您的示例 XML 文件,给它一个根标签:
$ cat file.xml
<?xml version='1.0' encoding='UTF-8'?>
<root>
<buildType class="hudson.mm.MMModuleSet$Component">
<viewableName>Component</viewableName>
</buildType>
<selectedCodeComponents>
<string>admin-content</string>
<string>admin</string>
</selectedCodeComponents>
<incrementalBuild>false</incrementalBuild>
</root>
你像这样删除 string
节点
$ xmlstarlet ed -d '//selectedCodeComponents/string' file.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<buildType class="hudson.mm.MMModuleSet$Component">
<viewableName>Component</viewableName>
</buildType>
<selectedCodeComponents/>
<incrementalBuild>false</incrementalBuild>
</root>
然后像这样添加新的字符串子节点
$ xmlstarlet ed -d '//selectedCodeComponents/string' file.xml |
xmlstarlet ed -s '//selectedCodeComponents' -t elem -n string -v something1 |
xmlstarlet ed -s '//selectedCodeComponents' -t elem -n string -v something2 |
xmlstarlet ed -s '//selectedCodeComponents' -t elem -n string -v something3
<?xml version="1.0" encoding="UTF-8"?>
<root>
<buildType class="hudson.mm.MMModuleSet$Component">
<viewableName>Component</viewableName>
</buildType>
<selectedCodeComponents>
<string>something1</string>
<string>something2</string>
<string>something3</string>
</selectedCodeComponents>
<incrementalBuild>false</incrementalBuild>
</root>
关于xmlstarlet - 删除一个 xml 元素 - shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697123/
如果在 xmlsarlet 部分提出了这个问题,我们深表歉意。我试图搜索它但找不到所以在这里发布。以便将来对我和其他新手也有帮助。 作为 xmlstarlet 的新手,我想学习它。那么XMLSTARL
使用此示例 XML: 如何插入元素 紧接在元素之后 使用 XMLStarlet? 最佳答案 xml ed -i(或--insert)将把它放在节点之前,xml ed -a(
如何从所有元素中提取“失败”并将它们相加? 3 a 00 105370
我有这个 xml 模式,我想要的是如何在 shell 脚本中使用 XMLStarlet 一一提取所有节点的值 Photo_Gallerie_1.jp
我想在 pom.xml 文件中找到对 SNAPSHOT 版本的引用。让我们使用位于 here 的 POM 文件举个例子。我想出了以下命令来查找包含字符串 SNAPSHOT 的元素: $ xmlstar
我想在 之后添加这个 block 00:00:05:00 1 2 00:00:01:00 下面是我的预期输出: Auto 0
这是 xml 片段: $ cat short.xml 期望的输出是: yahoo.com | ir1.fp.vip.sp2.yahoo.com Inc.
seg PASS1 PASS2" 我是 xmlstartlet 的新手。在上面的代码中,我试图将 star
我正在尝试自动将新的子节点添加到 nexus-core-feature-3.16.1-02.xml 因为我们正在使用一些插件来处理“盒子”解决方案不附带的工作。要点是,当新版本的 nexus-cont
我正在尝试使用 xmlstarlet 格式化 xml 文件,但我不想创建新的 xml 文件。 我试过了 xmlstarlet fo --inplace --indent-tab --omit-decl
我想使用 xmlstarlet 将第三方 xml 文件转换为 csv 文件。一些文件使用带有 xmlns 声明的默认 namespace ,其他文件使用没有 xmlns 声明的默认 namespace
我需要您在 XMLStarlet 命名空间方面的帮助。 (从未见过解释得不好的图书馆) 我有一个 XML 文件,如: My text Couverture 等等。 所以现在,由
以这个 xml 为例: Batch Editing Tool Apply Actions Modify Records Remove all Records Destroy al
我想知道如何使用 xmlstarlet 添加新行。 我的目标是添加一个 track_01在 job/input/file_input/uri. 之后 Auto 0 f
我正在处理一个处理 xml 文件的脚本。 我想用 xmlstarlet 更新这个 xml 文件中的属性值,但它不起作用。 这是 xml 文件的示例:
我想通过命令行更新 xml 文件中的值。 我是 xmlstartlet 的新手,我尝试使用以下命令,但它不起作用 xml ed -u "/web-app/welcome-file-list/welco
我正在使用命令: xmlstarlet ed --omit-decl --subnode "/boinc"--type elem -n app -v ""project_00.xml > projec
我正在使用命令: xmlstarlet ed --omit-decl --subnode "/boinc"--type elem -n app -v ""project_00.xml > projec
目前我有以下命令行,其中 $f 代表文件: xmlstarlet ed -d "//*/packageVersions" $f; 我也试过 xmlstarlet ed -d "//packageVer
我从未使用过 xmlstarlet,所以我只是想通过输入和所需的输出来保持简单,希望我能从发布的答案中学到一些东西。 输入: http://www.MYDOMAIN.com/
我是一名优秀的程序员,十分优秀!