Hao*_*ang 3 scripting bash xml
我正在尝试使用 bash 创建一个脚本来任意运行 JBoss XML 配置文件,当我看到特定标签时,将一些自定义值放入其中。
下面的 XML 是来自 JBoss 示例的 XML 配置文件的重要片段。我需要做的是<jvm>在服务器组标签中找到标签,然后检查<jvm-options>标签是否在那里。如果不是,则添加它;如果存在,则添加<options>带有其中值的标签。
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="-agentpath:"<DT_HOME>/agent/lib/libdtagent.so"=name=<AgentName>,server=<dynaTraceCollectorName>"/>
</jvm-options>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
</server-groups>
</domain>
Run Code Online (Sandbox Code Playgroud)
使用 XMLStarlet,您可以向元素添加子节点,也可以更新现有元素。为了涵盖元素存在和不存在的情况,我们可以
假设我们要添加的元素是<newtag>并且它的值应该是tagval。它也应该有一个属性,newattr,值为attrval。这意味着我们要添加的是
<newtag newattr="attrval">tagval</newtag>
Run Code Online (Sandbox Code Playgroud)
要删除元素:
$ xmlstarlet ed -d '//server-group/newtag' file.xml
Run Code Online (Sandbox Code Playgroud)
要添加具有属性的元素:
$ xmlstarlet ed -s '//server-group' -t elem -n 'newtag' -v 'tagval' \
-s '//server-group/newtag' -t attr -n 'newattr' -v 'attrval' file.xml
Run Code Online (Sandbox Code Playgroud)
将这些加在一起:
$ xmlstarlet ed -d '//server-group/newtag' \
-s '//server-group' -t elem -n 'newtag' -v 'tagval' \
-s '//server-group/newtag' -t attr -n 'newattr' -v 'attrval' file.xml
Run Code Online (Sandbox Code Playgroud)
给定输入 XML
<?xml version="1.0"?>
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="somevalue"/>
</jvm-options>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
</server-groups>
Run Code Online (Sandbox Code Playgroud)
这导致输出
<?xml version="1.0"?>
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="somevalue"/>
</jvm-options>
</jvm>
<socket-binding-group ref="full-sockets"/>
<newtag newattr="attrval">tagval</newtag>
</server-group>
</server-groups>
Run Code Online (Sandbox Code Playgroud)
请注意,XPath 表达式//server-group将匹配输入 XML中的所有 server_group元素。如果您只想匹配其name属性为 的那个main-server-group,则必须更改//server-group为//server-group[@name="main-server-group"]。
XMLStarlet 可从http://xmlstar.sourceforge.net/ 获得,但很可能已经有一个可用于您的 Unix 的预打包版本(使用它)。有时,只调用 XMLStarlet 可执行文件xml而不是xmlstarlet.
| 归档时间: |
|
| 查看次数: |
7825 次 |
| 最近记录: |