2
<application xmlns="http://someurl">
    <Detail1/>
    <Detail2>
    <Property/>
    </Detail2>
</application>

我正在尝试将xmlns:xs="http://www.w3.org/2001/XMLSchema"和添加xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"到“应用程序根节点”。我试图在 stackoverflow 上关注很多链接,但在 XSLT 1.0 中似乎没有任何效果。有人可以帮我解决这个问题吗?

4

1 回答 1

3

由于 XSLT 1.0 没有<xsl:namespace>XSLT 2.0 中的指令,我使用的技术是从我的样式表中复制这些节点:

输入:

t:\ftemp>type ns.xml
  <application xmlns="http://someurl">
    <Detail1/>
    <Detail2>
    <Property/>
    </Detail2>
</application>

执行:

t:\ftemp>call xslt ns.xml ns.xsl
<?xml version="1.0" encoding="utf-8"?><application xmlns="http://someurl" xmlns:
xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchem
a-instance">
    <Detail1/>
    <Detail2>
    <Property/>
    </Detail2>
</application>

样式表:

t:\ftemp>type ns.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                version="1.0">

<xsl:template match="/*">
  <xsl:copy>
    <xsl:copy-of select="document('')/*/namespace::xs"/>
    <xsl:copy-of select="document('')/*/namespace::xsi"/>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

<xsl:template match="@*|node()"><!--identity for all other nodes-->
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>
t:\ftemp>
于 2013-09-30T21:30:33.490 回答