1

我正在研究一些 XSLT 以从复杂的 XML 中提取值。

xml:

   <bean id="timingAdvice" 

class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor" />

<bean id="XMLhandler" class="com.order.OrderStatusSAXHandler">
</bean>

我希望实现的输出:

<bean>
<id>timingAdvice</id>
<class>org.springframework.aop.interceptor.PerformanceMonitorInterceptor</class>
</bean>

<bean>
<id>XMLhandler</id>
<class>com.citi.get.rio.order.OrderStatusSAXHandler</class>
</bean>

我正在使用这个 XSLT:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8"
        indent="yes" />
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
    </xsl:template>
        <xsl:template match="beans/bean">
        <xsl:element name="{@class}">
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
        </xsl:template>
    <xsl:template match="beans/bean">
        <xsl:element name="{@id}">
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

然而,这输出:

    <?xml version="1.0" encoding="UTF-8"?>
<beans>

<timingAdvice/>
<XMLhandler>
</XMLhandler>
</beans>

这不是我要找的。

我想检查 xml 打印它们的每个属性,如下所示:

<attributeName>value<attributeName>

编辑

我遇到了beans标签的问题,它包含许多对 Spring Framework 的 spring 引用:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"
default-lazy-init="false">

当这是开始标签时,提供的解决方案不提供所需的输出。有没有办法忽略beans标签中的这些引用

4

1 回答 1

1

那么,像这样的事情?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                              xmlns:bn="http://www.springframework.org/schema/beans">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="bn:bean/@*">
    <xsl:element name="{name()}" namespace="{namespace-uri(..)}">
      <xsl:value-of select="." />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

当它在您的示例输入上运行时(当它被包装在一个<beans>元素中时),结果是:

<beans xsi:schemaLocation="     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd" default-lazy-init="false" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util">
  <bean>
    <id>timingAdvice</id>
    <class>org.springframework.aop.interceptor.PerformanceMonitorInterceptor</class>
  </bean>

  <bean>
    <id>XMLhandler</id>
    <class>com.order.OrderStatusSAXHandler</class>
  </bean>
</beans>

从属性转换的元素的顺序是否重要,或者它们是否可以与属性以相同的顺序出现?

于 2013-05-16T13:09:31.250 回答