要编辑的 XML -
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<broker xmlns="http://activemq.apache.org/schema">
<jaas-security domain="activemq"/>
<server configuration="file:/Users/gugu/Docs/artemis/var/lib/broker/etc//broker.xml"/>
<web path="web" rootRedirectLocation="console">
<binding uri="https://localhost:8161">
<app url="activemq-branding" war="activemq-branding.war"/>
<app url="artemis-plugin" war="artemis-plugin.war"/>
<app url="console" war="console.war"/>
</binding>
</web>
</broker>
在上面的 XML 中,我想添加以下属性
uri="https://localhost:8161"
.
keyStorePath="$path/server-keystore.jks" keyStorePassword="password"
添加这些后,需要将
http
更改为https
,还可能需要更改端口。
结果-
<binding uri="https://localhost:8443" keyStorePath="$path/server-keystore.jks" keyStorePassword="securepass">
上面用于
keystone.jks
的路径和密码应该来自两个不同的变量。
有人可以帮助我如何使用 XMLstarlet 或 sed 命令就地编辑它吗?
我试过的- 要添加属性,(首先我尝试不使用变量)
xmlstarlet edit --inplace \
--insert "/broker/web/binding[not(@keyStorePath)]" --type attr -n keyStorePath --value ".ssl/server-keystore.jks" \
bootstrap.xml
文件没有变化
您的 XML 文件使用 namespaces (
xmlns=
)。这将添加两个属性并更新一个属性:
xmlstarlet edit \
-N x='http://activemq.apache.org/schema' \
--insert '//x:broker/x:web/x:binding' --type attr -n 'keyStorePath' --value '$path/server-keystore.jks' \
--insert '//x:broker/x:web/x:binding' --type attr -n 'keyStorePassword' --value 'password' \
--update '//x:broker/x:web/x:binding/@uri' --value 'https://localhost:8443' \
file.xml
输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<broker xmlns="http://activemq.apache.org/schema">
<jaas-security domain="activemq"/>
<server configuration="file:/Users/gugu/Docs/artemis/var/lib/broker/etc//broker.xml"/>
<web path="web" rootRedirectLocation="console">
<binding uri="https://localhost:8443" keyStorePath="$path/server-keystore.jks" keyStorePassword="password">
<app url="activemq-branding" war="activemq-branding.war"/>
<app url="artemis-plugin" war="artemis-plugin.war"/>
<app url="console" war="console.war"/>
</binding>
</web>
</broker>
关于语法的信息:
xmlstarlet edit