向 XML 添加属性

问题描述 投票:0回答:1

要编辑的 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 sed xml-namespaces xmlstarlet
1个回答
0
投票

您的 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

© www.soinside.com 2019 - 2024. All rights reserved.