带有命名空间的 XSLT:复制模板省略属性

发布于 2025-01-05 20:41:37 字数 1447 浏览 1 评论 0原文

将标准 XSLT 复制模板应用

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

JBoss AS 7standalone.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"/>

Why? 我怎样才能让它复制所有内容?

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>

Applying the standard XSLT copy template,

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

to the JBoss AS 7 standalone.xml, leads to loss of parameters:

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

instead of

<?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"/>

Why?
How can i Make it copy everything?

XSLT transformation is done by Maven XML plugin.
The whole template:

<?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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情愿 2025-01-12 20:41:37

您的模板似乎工作正常。

我修改了它和 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>

我下载了完整的 JBossstandalone.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"?>

Your template appears to be working correctly.

I modified it and the XML to show that is working:

<?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>

Run with this 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>

Produces:

<?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>

Here's the output run with your original 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>

I downloaded the full JBoss standalone.xml, ran your XSL, and here's the diff of the input and output 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"?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文