Xml XSLT:如何在输出子节点中强制命名空间

Xml XSLT:如何在输出子节点中强制命名空间,xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,我正试图使用XSLT2.0(如果需要,我可以升级到3.0版)实现OAI-PMH获取XML,如中所述 我的问题是,根据模式的要求,在OAI-PMH标记和metadata标记中获取“xsi”名称空间。 目前我的代码有点像这样(为了简洁起见,我删除了一些东西): oai_dc:dc标记中缺少。但是基于OAI-PMH规范/模式,它需要存在。有人能帮我解决这个问题吗?我可以告诉你,你可以通过把xmlns=”放在http://www.openarchives.org/OAI/2.0/“在样式表的根目录上。至

我正试图使用XSLT2.0(如果需要,我可以升级到3.0版)实现OAI-PMH获取XML,如中所述 我的问题是,根据模式的要求,在OAI-PMH标记和metadata标记中获取“xsi”名称空间。 目前我的代码有点像这样(为了简洁起见,我删除了一些东西):


oai_dc:dc标记中缺少。但是基于OAI-PMH规范/模式,它需要存在。有人能帮我解决这个问题吗?

我可以告诉你,你可以通过把
xmlns=”放在http://www.openarchives.org/OAI/2.0/“
在样式表的根目录上。至于
xmlns:xsi
名称空间声明,我认为您不能用XSLT强制执行它,它在基于祖先声明的范围内,因此序列化程序不需要将其添加到子元素中。

您提到的规范确实说:“每个元数据部分都必须包含属性xmlns:xsi”。我认为唯一合理的解释方法是“前缀“xsi”到名称空间“”的名称空间绑定必须在每个元数据部分的范围内”


如果规范使用DTD要求命名空间声明在特定元素上实际存在(就像某些DTD那样),那么您将遇到问题。但是我没有看到任何证据表明这个规范使用了DTD。对于XSD模式,没有办法说必须存在冗余的名称空间声明。

非常感谢。我将由请求更改的人执行此操作。希望我没有“有问题”。
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
exclude-result-prefixes="xs" version="2.0"
>

<xsl:output indent="no" encoding="UTF-8" method="xml" omit-xml-

 declaration="no" media-type="application/xml;charset=UTF-8"/>

<xsl:template match="/">
    <xsl:apply-templates select="response" />        
</xsl:template>

<xsl:template match="response">
    <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"            
        xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ 

        http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
       <xsl:apply-templates select="doc"/>    
    </OAI-PMH>       
</xsl:template>

<xsl:template match="doc">
    <record>
        <header>
        </header>
         <metadata>
             <oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" 
              xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
              xmlns="http://www.openarchives.org/OAI/2.0/"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ 
              http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
              <xsl:text>call some templates</xsltext>
      </metadata> 
    </record>
</xsl:template>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate xmlns="">2015-09-30T16:47:19Z</responseDate>
<request xmlns="" verb="ListRecords" metadataPrefix="oai_dc" set="null" from="null" until="null">http://manchester.ac.uk/escholar/api/oai2</request>
<ListRecords xmlns="">
    <record>
        <header>
            <identifier>oai:escholar.manchester.ac.uk:uk-ac-man-scw-1964</identifier>
            2010-12-02T15:44:59.733Z
        </header>
        <metadata>
            <oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns="http://www.openarchives.org/OAI/2.0/" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
            </oai_dc:dc>
        </metadata>
    </record>
</ListRecords>
</OAI-PMH>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"