带名称空间的XSLT:复制模板省略了属性

时间:2012-02-16 01:14:42

标签: xslt namespaces xml-namespaces

应用标准XSLT复制模板

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

JBoss AS 7 standalone.xml会导致参数丢失:

<?xml version="1.0" encoding="UTF-8"?><server xmlns="urn:jboss:domain:1.1">
    <extensions>
        <extension/>
        <extension/>

而不是

<?xml version="1.0" encoding="UTF-8"?><server xmlns="urn:jboss:domain:1.1">
    <extensions>
        <extension module="org.jboss.as.clustering.infinispan"/>
        <extension module="org.jboss.as.configadmin"/>

为什么呢? 我怎样才能复制一切?

XSLT转换由Maven XML插件完成。 整个模板:

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

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:ds="urn:jboss:domain:datasources:1.0"
            xmlns="urn:jboss:domain:1.1"
            version="1.0">
    <xsl:output method="xml" indent="yes"/>

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

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:2)

您的模板似乎工作正常。

我修改了它并且XML显示它正在工作:

<?xml version="1.0" encoding="UTF-8"?>
<server xmlns="urn:jboss:domain:1.1">
  <extensions>
    <extension module="org.jboss.as.clustering.infinispan"/>
    <extension module="org.jboss.as.configadmin"/>
  </extensions>
</server>

使用此XSL运行:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:ds="urn:jboss:domain:datasources:1.0"
                xmlns:so="urn:jboss:domain:1.1"
                version="1.0">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="*|@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="*|@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="so:extension">
    <xsl:copy>
    <xsl:attribute name="testing">just for fun!!</xsl:attribute>
    <xsl:copy-of select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

产地:

<?xml version="1.0"?>
<server xmlns="urn:jboss:domain:1.1">
  <extensions>
    <extension testing="just for fun!!" module="org.jboss.as.clustering.infinispan"/>
    <extension testing="just for fun!!" module="org.jboss.as.configadmin"/>
  </extensions>
</server>

这是原始XSL的输出运行:

<?xml version="1.0"?>
<server xmlns="urn:jboss:domain:1.1">
  <extensions>
    <extension module="org.jboss.as.clustering.infinispan"/>
    <extension module="org.jboss.as.configadmin"/>
  </extensions>
</server>

我下载了完整的JBoss standalone.xml,运行了你的XSL,这里是输入和输出XML的差异:

so zacharyyoung$ xsltproc so.xsl so.xml > output.xml
so zacharyyoung$ diff so.xml output.xml
1,2c1
< <?xml version='1.0' encoding='UTF-8'?>
< 
---
> <?xml version="1.0"?>