Xslt 当name是属性值模板时,xsl:element使用哪个名称空间

Xslt 当name是属性值模板时,xsl:element使用哪个名称空间,xslt,xslt-1.0,Xslt,Xslt 1.0,我试图理解xsl:element如何正常工作,我有以下测试转换: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"> <xsl:template match="test">

我试图理解xsl:element如何正常工作,我有以下测试转换:

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

    <xsl:template match="test">
        <output>
            <test1/>
            <xsl:element name="test2"/>
            <xsl:variable name="three" select="3"/>
            <xsl:element name="test{$three}"/>
        </output>
    </xsl:template>
</xsl:stylesheet>

适用于本文件时:

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

我使用xsltproc得到这个结果

<?xml version="1.0"?>
<output xmlns="http://www.w3.org/1999/xhtml">
    <test1/>
    <test2/>
    <test3 xmlns=""/>
</output>


为什么test3节点与test1和test2不在同一名称空间中?

使用Visual Studio并使其应用XSLT我得到了以下内容(为可读性而格式化),因此我认为这是xsltproc中的一个错误

<?xml version="1.0" encoding="utf-8"?>
<output xmlns="http://www.w3.org/1999/xhtml">
  <test1 />
  <test2 />
  <test3 />
</output>


我无法重现您的结果;xsltproc(根据libxml20703、libxslt 10124和libexslt 813编译)为我提供了与其他名称空间相同的test3。您使用的是哪个版本的xsltproc?使用libxml 20900、libxslt 10127和libexslt 816,xsltproc是针对libxml 20900编译的,libxslt 10127和libexslt 816 libxslt 10127是针对libxml 20900编译的,libexslt 816是针对libxml 20900编译的,所以这可能是一个bug?