我如何使用 XSLT 从 XML 获取一些信息?

How can i get just some info from XML using XSLT?

我想从 XML 中获取一些字段,这里是 XML:

<server xmlns="urn:jboss:domain:1.4">
    <extensions>
        ...
    </extensions>
    <management>
        ...
    </management>
    <profile>
        <subsystem xmlns="urn:jboss:domain:logging:1.2">
            ...
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:cmp:1.0"/>
        <subsystem xmlns="urn:jboss:domain:datasources:1.1">
            <datasources>
                <datasource jta="true" jndi-name="java:/calypso/datasources/CalypsoDS" pool-name="CalypsoDS" enabled="true" use-ccm="false">
                    <connection-url>jdbc:oracle:thin:@//tcomora-app.t-maps.local:1521/TIT1CAL.ORA.BDE.ES</connection-url>
                    <driver>oracle</driver>
                    <pool>
                        <min-pool-size>5</min-pool-size>
                        <max-pool-size>200</max-pool-size>
                    </pool>
                    <security>
                        <user-name>TIT1CADM</user-name>
                        <password>TIT1CADM</password>
                    </security>
                    <validation>
                        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker" />
                        <validate-on-match>true</validate-on-match>
                        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter" />
                    </validation>
                    <timeout>
                        <set-tx-query-timeout>true</set-tx-query-timeout>
                        <blocking-timeout-millis>5000</blocking-timeout-millis>
                        <idle-timeout-minutes>15</idle-timeout-minutes>
                    </timeout>
                    <statement>
                        <track-statements>false</track-statements>
                    </statement>
                </datasource>
                <drivers>
                    <driver name="oracle" module="com.oracle.ojdbc">
                        <xa-datasource-class>oracle.jdbc.OracleDriver</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
            <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="60000" auto-deploy-zipped="true" auto-deploy-exploded="true" deployment-timeout="3600"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:ee:1.1">
            <spec-descriptor-property-replacement>true</spec-descriptor-property-replacement>
            <jboss-descriptor-property-replacement>true</jboss-descriptor-property-replacement>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:ejb3:1.4">
            <session-bean>
                <stateless>
                    <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
                </stateless>
                <stateful default-access-timeout="5000" cache-ref="simple"/>
                <singleton default-access-timeout="5000"/>
            </session-bean>
            <mdb>
                <resource-adapter-ref resource-adapter-name="mdb-hornetq-ra"/>
                <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
            </mdb>
            <pools>
                <bean-instance-pools>
                    <strict-max-pool name="slsb-strict-max-pool" max-pool-size="200" instance-acquisition-timeout="10" instance-acquisition-timeout-unit="SECONDS"/>
                    <strict-max-pool name="mdb-strict-max-pool" max-pool-size="50" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                </bean-instance-pools>
            </pools>
            <caches>
                <cache name="simple" aliases="NoPassivationCache"/>
                <cache name="passivating" passivation-store-ref="file" aliases="SimpleStatefulCache"/>
            </caches>
            <passivation-stores>
                <file-passivation-store name="file"/>
            </passivation-stores>
            <async thread-pool-name="default"/>
            <timer-service thread-pool-name="default">
                <data-store path="timer-service-data" relative-to="jboss.server.data.dir"/>
            </timer-service>
            <remote connector-ref="remoting-connector" thread-pool-name="remoting">
                <channel-creation-options>
                    <option name="WORKER_READ_THREADS" value="8" type="xnio"/>
                    <option name="WORKER_WRITE_THREADS" value="8" type="xnio"/>
                    <option name="MAX_INBOUND_MESSAGES" value="200" type="remoting"/>
                    <option name="MAX_OUTBOUND_MESSAGES" value="200" type="remoting"/>
                </channel-creation-options>                
            </remote>
            <thread-pools>
                <thread-pool name="default">
                    <max-threads count="10"/>
                    <keepalive-time time="100" unit="milliseconds"/>
                </thread-pool>
                <thread-pool name="remoting">
                    <max-threads count="200"/>
                    <keepalive-time time="1000" unit="milliseconds"/>
                </thread-pool>
            </thread-pools>
            <iiop enable-by-default="false" use-qualified-name="false"/>
            <default-security-domain value="other"/>
            <default-missing-method-permissions-deny-access value="false"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:infinispan:1.4">
            <cache-container name="web" aliases="standard-session-cache" default-cache="local-web" module="org.jboss.as.clustering.web.infinispan">
                <local-cache name="local-web" batching="true">
                    <file-store passivation="false" purge="false"/>
                </local-cache>
            </cache-container>
            <cache-container name="hibernate" default-cache="local-query" module="org.jboss.as.jpa.hibernate:4">
                <local-cache name="entity">
                    <transaction mode="NON_XA"/>
                    <eviction strategy="LRU" max-entries="10000"/>
                    <expiration max-idle="100000"/>
                </local-cache>
                <local-cache name="local-query">
                    <transaction mode="NONE"/>
                    <eviction strategy="LRU" max-entries="10000"/>
                    <expiration max-idle="100000"/>
                </local-cache>
                <local-cache name="timestamps">
                    <transaction mode="NONE"/>
                    <eviction strategy="NONE"/>
                </local-cache>
            </cache-container>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jacorb:1.3">
            <orb socket-binding="jacorb" ssl-socket-binding="jacorb-ssl">
                <initializers transactions="spec" security="identity"/>
            </orb>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jaxr:1.1">
            <connection-factory jndi-name="java:jboss/jaxr/ConnectionFactory"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>
        <subsystem xmlns="urn:jboss:domain:jca:1.1">
            <archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
            <bean-validation enabled="true"/>
            <default-workmanager>
                <short-running-threads>
                    <core-threads count="50"/>
                    <queue-length count="50"/>
                    <max-threads count="50"/>
                    <keepalive-time time="10" unit="seconds"/>
                </short-running-threads>
                <long-running-threads>
                    <core-threads count="50"/>
                    <queue-length count="50"/>
                    <max-threads count="50"/>
                    <keepalive-time time="10" unit="seconds"/>
                </long-running-threads>
            </default-workmanager>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jdr:1.0"/>
        <subsystem xmlns="urn:jboss:domain:jmx:1.2">
            <expose-resolved-model/>
            <expose-expression-model/>
            <remoting-connector/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jpa:1.1">
            <jpa default-datasource="" default-extended-persistence-inheritance="DEEP"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:jsf:1.0"/>
        <subsystem xmlns="urn:jboss:domain:jsr77:1.0"/>
        <subsystem xmlns="urn:jboss:domain:mail:1.0">
            <mail-session jndi-name="java:jboss/mail/Default">
                <smtp-server outbound-socket-binding-ref="mail-smtp"/>
            </mail-session>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:messaging:1.3">
            <hornetq-server>
                <persistence-enabled>true</persistence-enabled>
                <security-enabled>false</security-enabled>
                <jmx-management-enabled>true</jmx-management-enabled>
                <journal-type>ASYNCIO</journal-type>
                <journal-sync-non-transactional>false</journal-sync-non-transactional>
                <journal-file-size>10240000</journal-file-size>
                <journal-min-files>2</journal-min-files>
                <connectors>
                    <netty-connector name="netty" socket-binding="messaging">
                        <param key="use-nio" value="true"/>
                    </netty-connector>
                    <netty-connector name="netty-throughput" socket-binding="messaging-throughput">
                        <param key="batch-delay" value="50"/>
                    </netty-connector>
                    <in-vm-connector name="in-vm" server-id="0"/>
                    <connector name="calypso-jms-connector">
                        <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
                        <param key="host" value="es0tlv06-app.t-maps.local"/>
                        <param key="port" value="5445"/>
                    </connector>
                </connectors>
                <acceptors>
                    <netty-acceptor name="netty" socket-binding="messaging">
                        <param key="direct-deliver" value="false"/>
                        <param key="use-nio" value="true"/>
                    </netty-acceptor>
                    <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput">
                        <param key="batch-delay" value="50"/>
                        <param key="direct-deliver" value="false"/>
                    </netty-acceptor>
                    <in-vm-acceptor name="in-vm" server-id="0"/>
                </acceptors>
                <security-settings>
                    <security-setting match="#">
                        <permission type="send" roles="basic_user_role"/>
                        <permission type="consume" roles="basic_user_role"/>
                        <permission type="createNonDurableQueue" roles="basic_user_role"/>
                        <permission type="deleteNonDurableQueue" roles="basic_user_role"/>
                    </security-setting>
                </security-settings>
                <address-settings>
                    <!-- calypso topic -->
                    <address-setting match="jms.topic.calypso">
                        <dead-letter-address>jms.queue.DLQ</dead-letter-address>
                        <expiry-address>jms.queue.ExpiryQueue</expiry-address>
                        <redelivery-delay>0</redelivery-delay>
                        <max-size-bytes>250857600</max-size-bytes>
                        <page-size-bytes>25085760</page-size-bytes>
                        <address-full-policy>PAGE</address-full-policy>
                        <message-counter-history-day-limit>10</message-counter-history-day-limit>
                    </address-setting>
                    <!--default for catch all-->
                    <address-setting match="#">
                        <dead-letter-address>jms.queue.DLQ</dead-letter-address>
                        <expiry-address>jms.queue.ExpiryQueue</expiry-address>
                        <redelivery-delay>0</redelivery-delay>
                        <max-size-bytes>10485760</max-size-bytes>
                        <page-size-bytes>5048576</page-size-bytes>
                        <address-full-policy>PAGE</address-full-policy>
                        <message-counter-history-day-limit>10</message-counter-history-day-limit>
                    </address-setting>
                </address-settings>
                <jms-connection-factories>
                    <connection-factory name="hornetq-ra">
                        <connectors>
                            <connector-ref connector-name="in-vm"/>
                        </connectors>
                        <entries>
                            <entry name="java:/calypso/jms/ConnectionFactory"/>
                        </entries>
                    </connection-factory>
                    <connection-factory name="RemoteConnectionFactory">
                        <connectors>
                            <connector-ref connector-name="netty"/>
                        </connectors>
                        <entries>
                            <entry name="java:jboss/exported/jms/connectionFactory"/>
                        </entries>
                    </connection-factory>
                    <pooled-connection-factory name="mdb-hornetq-ra">
                        <transaction mode="none"/>
                        <connectors>
                            <connector-ref connector-name="in-vm"/>
                        </connectors>
                        <entries>
                            <entry name="java:/calypso/jms/PooledConnectionFactory"/>
                        </entries>
                    </pooled-connection-factory>
                </jms-connection-factories>
                <jms-destinations>
                    <jms-topic name="calypso.adminevents">
                        <entry name="topic/calypsoAdmin"/>
                        <entry name="java:jboss/exported/topic/calypsoAdmin"/>
                    </jms-topic>
                    <jms-topic name="calypso">
                        <entry name="topic/calypso"/>
                        <entry name="java:jboss/exported/topic/calypso"/>
                    </jms-topic>
                    <jms-queue name="CalypsoToBONY">
                      <entry name="queue/CalypsoToBONY"/>
                      <durable>false</durable>
                    </jms-queue>
                    <jms-queue name="BONYToCalypso">
                      <entry name="queue/BONYToCalypso"/>
                      <durable>false</durable>
                    </jms-queue>
                    <jms-queue name="CalypsoToGSCC">
                      <entry name="queue/CalypsoToGSCC"/>
                      <durable>false</durable>
                    </jms-queue>
                    <jms-queue name="GSCCToCalypso">
                      <entry name="queue/GSCCToCalypso"/>
                      <durable>false</durable>
                    </jms-queue>
                    <jms-queue name="CalypsoToSwift">
                      <entry name="queue/CalypsoToSwift"/>
                      <durable>false</durable>
                    </jms-queue>
                    <jms-queue name="SwiftToCalypso">
                      <entry name="queue/SwiftToCalypso"/>
                      <durable>false</durable>
                    </jms-queue>
                    <jms-queue name="DLQ">
                        <entry name="queue/DLQ"/>
                        <durable>false</durable>
                    </jms-queue>
                    <jms-queue name="ExpiryQueue">
                        <entry name="queue/ExpiryQueue"/>
                        <durable>false</durable>
                    </jms-queue>
                </jms-destinations>
            </hornetq-server>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:naming:1.2">
            <remote-naming/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:pojo:1.0"/>
        <subsystem xmlns="urn:jboss:domain:remoting:1.1">
            <connector name="remoting-connector" socket-binding="remoting" security-realm="CalypsoSecurityRealm"/>            
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"/>
        <subsystem xmlns="urn:jboss:domain:sar:1.0"/>
        <subsystem xmlns="urn:jboss:domain:security:1.2">
            <security-domains>
                <security-domain name="calypso-db-security-domain" cache-type="default">
                    <authentication>
                        <login-module code="com.calypso.authentication.module.CalypsoAuditLoginModule" flag="required" module="deployment.dataserver.war"/>
                        <login-module code="Database" flag="required">
                            <module-option name="dsJndiName" value="java:/calypso/datasources/CalypsoDS"/>
                            <module-option name="principalsQuery" value="SELECT hex_password from user_name WHERE user_name=? and acc_locked_date is NULL"/>
                            <module-option name="rolesQuery" value="SELECT 'AdmServer','Roles' FROM group_access userrole, group_access usergroup, user_name u WHERE u.user_name=? AND u.user_name=usergroup.access_value AND userrole.group_name = usergroup.group_name AND ( ( userrole.access_id=1 AND userrole.access_value='AdmServer' ) OR ( usergroup.access_id=0 AND usergroup.group_name IN ( SELECT ugn.group_name FROM user_group_name ugn WHERE ugn.is_admin_b=1 or ugn.group_name='admin' ) ) ) UNION SELECT 'basic_user_role', 'Roles' FROM calypso_info"/>
                            <module-option name="hashAlgorithm" value="SHA-1"/>
                            <module-option name="hashCharset" value="UTF-8"/>
                            <module-option name="hashEncoding" value="hex"/>
                        </login-module>
                    </authentication>
                </security-domain>
                <security-domain name="other" cache-type="default">
                    <authentication>
                        <login-module code="Remoting" flag="optional">
                            <module-option name="password-stacking" value="useFirstPass"/>
                        </login-module>
                        <login-module code="RealmDirect" flag="required">
                            <module-option name="password-stacking" value="useFirstPass"/>
                        </login-module>
                    </authentication>
                </security-domain>
                <security-domain name="jboss-web-policy" cache-type="default">
                    <authorization>
                        <policy-module code="Delegating" flag="required"/>
                    </authorization>
                </security-domain>
                <security-domain name="jboss-ejb-policy" cache-type="default">
                    <authorization>
                        <policy-module code="Delegating" flag="required"/>
                    </authorization>
                </security-domain>
            </security-domains>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:threads:1.1"/>
        <subsystem xmlns="urn:jboss:domain:transactions:1.2">
            <core-environment>
                <process-id>
                    <uuid/>
                </process-id>
            </core-environment>
            <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
            <coordinator-environment default-timeout="1800"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:web:1.4" default-virtual-server="default-host" native="false">
            <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
            <connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" secure="true">
                <ssl name="https" key-alias="calypso" password="maps01" certificate-key-file="/home/apst/mop/key/server.keystore" certificate-file="/home/apst/mop/key/client.truststore"/>
            </connector>
            <connector name="management-https" protocol="HTTP/1.1" scheme="https" secure="true" socket-binding="management-https">
                <ssl name="https" key-alias="calypso" password="maps01" certificate-key-file="/home/apst/mop/key/server.keystore" certificate-file="/home/apst/mop/key/client.truststore"/>
            </connector>
            <virtual-server name="default-host" enable-welcome-root="true">
                <alias name="localhost"/>
            </virtual-server>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:webservices:1.2">
            <modify-wsdl-address>true</modify-wsdl-address>
            <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
            <endpoint-config name="Standard-Endpoint-Config"/>
            <endpoint-config name="Recording-Endpoint-Config">
                <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
                    <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
                </pre-handler-chain>
            </endpoint-config>
            <client-config name="Standard-Client-Config"/>
        </subsystem>
        <subsystem xmlns="urn:jboss:domain:weld:1.0"/>
    </profile>

我正在尝试执行此 XSL:

<?xml version="1.0" encoding='UTF-8'?>
<xsl:stylesheet version="1.0"
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


       <xsl:template match="/"> 
                     <xsl:apply-templates/> 
       </xsl:template>


       <xsl:template match="profile">
              <profile>      
                     <xsl:apply-templates select="subsystem"/>
              </profile>
       </xsl:template>

       <xsl:template match="subsystem" >
              <subsystem>
                     <xsl:value-of select="./@xmlns"/>      
                     <xsl:apply-templates select="datasources"/>
              </subsystem>
       </xsl:template>
       <xsl:template match="datasources" >
              <datasources>     
                     <xsl:apply-templates select="datasource"/>
              </datasources>
       </xsl:template>
       <xsl:template match="datasource">
              <datasource>
                     <xsl:value-of select="./@jta"/>
                     <xsl:value-of select="./@jndi-name"/>
                     <xsl:value-of select="./@pool-name"/>
                     <xsl:value-of select="./@enabled"/>
                     <xsl:value-of select="./@use-ccm"/>                    
                     <xsl:apply-templates select="connection-url"/>
                     <xsl:apply-templates select="driver"/>
                     <xsl:apply-templates select="pool"/>
                     <xsl:apply-templates select="security"/>
                     <xsl:apply-templates select="validation"/>
                     <xsl:apply-templates select="statement"/>
              </datasource>
       </xsl:template>       
       <xsl:template match="connection-url">    
              <connection-url>
                     <xsl:value-of select="." />
              </connection-url>
       </xsl:template>       
       <xsl:template match="driver" >     
              <driver>      
                     <xsl:apply-templates select="HostName"/>
              </driver>
       </xsl:template>       
       <xsl:template match="pool">
              <pool>
                     <xsl:apply-templates select="min-pool-size"/>
                     <xsl:apply-templates select="max-pool-size"/>
              </pool>
       </xsl:template>      
       <xsl:template match="security">
              <security>
                     <xsl:apply-templates select="user-name"/>
                     <xsl:apply-templates select="password"/>
              </security>

       </xsl:template>       
       <xsl:template match="validation">
              <validation>
                     <xsl:apply-templates select="valid-connection-checker"/>
                     <xsl:apply-templates select="validate-on-match"/>
                     <xsl:apply-templates select="exception-sorter"/>
              </validation>
       </xsl:template>       
       <xsl:template match="statement">
              <statement>
                     <xsl:apply-templates select="track-statements"/>
              </statement>
       </xsl:template>       
       <xsl:template match="HostName">
              <HostName>
                     <xsl:value-of select="."/>   
              </HostName>
       </xsl:template>      
       <xsl:template match="min-pool-size">
              <min-pool-size>
                     <xsl:value-of select="."/>   
              </min-pool-size>
       </xsl:template>       
       <xsl:template match="max-pool-size">
              <max-pool-size>
                     <xsl:value-of select="."/>   
              </max-pool-size>
       </xsl:template>      
       <xsl:template match="user-name">
              <user-name>
                     <xsl:value-of select="."/>   
              </user-name>
       </xsl:template>      
       <xsl:template match="password">
              <password>
                     <xsl:value-of select="."/>   
              </password>
       </xsl:template>      
       <xsl:template match="valid-connection-checker">
              <valid-connection-checker>

                     <xsl:value-of select="."/>   
              </valid-connection-checker>
       </xsl:template>       
       <xsl:template match="validate-on-match">
              <validate-on-match>

                     <xsl:value-of select="."/>   
              </validate-on-match>
       </xsl:template>       
       <xsl:template match="exception-sorter">
              <exception-sorter>
                     <xsl:value-of select="."/>   
              </exception-sorter>
       </xsl:template>      
       <xsl:template match="track-statements">
              <track-statements>
                     <xsl:value-of select="."/>   
              </track-statements>
       </xsl:template>              
</xsl:stylesheet>

但它不起作用。我只想要里面的信息 "server/profile/subsystem/datasources"

希望有人能解决。 ^^

您必须考虑 XML 中使用的命名空间,并像这样在 XSLT 中注册它们:

<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:domain="urn:jboss:domain:1.4"
   xmlns:datasources="urn:jboss:domain:datasources:1.1">

   <xsl:template match="/">
       <xsl:copy-of select="/domain:server/domain:profile/datasources:subsystem/datasources:datasources"/>
   </xsl:template>