【问题标题】:How to add a tag with XmlStarlet to an XML document without duplication如何在不重复的情况下将带有 XmlStarlet 的标签添加到 XML 文档
【发布时间】:2019-06-06 15:10:22
【问题描述】:

我正在尝试向我的 server.xml tomcat 文档添加一个“侦听器”标签。但是当我尝试添加它时它会成倍增加。

当我尝试以下操作时,它会放置多个标签,并且添加的属性会附加到每个侦听器标签。

xmlstarlet edit --omit-decl \
--insert "/Server" --type elem --name "Listener" \
--subnode "/Server/Listener" --type attr -name "className" --value "org.jboss.modcluster.container.tomcat.ModClusterListener" \
server.xml > temp.xml

文件

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false" deployOnStartup="true">
        <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto"/>
        <Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false"
               showServerInfo="false" />
      </Host>
    </Engine>
  </Service>
</Server>

我想要的是添加一个“Listener”标签,并且该标签应该具有 modcluster 类名。

【问题讨论】:

    标签: xml xpath xml-parsing xmlstarlet


    【解决方案1】:

    这实际上对我有用:

    xmlstarlet edit --omit-decl \
    --append "Server/Listener[5]" --type elem --name "Listener" \
    --subnode "/Server/Listener[6]" --type attr -name "className" --value "org.jboss.modcluster.container.tomcat.ModClusterListener" \
    server.xml > temp.xml
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多