我需要创建一个XML文档,其中包含一组其他XML文档。它基本上应该是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<ListRecords>
<record>
<metadata>
<registryObjects
xmlns="http://ands.org.au/standards/rif-cs/registryObjects"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ands.org.au/standards/rif-cs/registryObjects http://services.ands.org.au/documentation/rifcs/schema/registryObjects.xsd">
<registryObject>
...
</registryObject>
</registryObjects>
</metadata>
</record>
</ListRecords>
</OAI-PMH>
我发现我可以使用xsl:element:
来更改命名空间<xsl:element name="registryObjects" namespace="http://ands.org.au/standards/rif-cs/registryObjects">
但是,它只更改了此特定元素的命名空间。下一个又变成了“http://www.openarchives.org/OAI/2.0/”:
<metadata>
<registryObjects xmlns="http://ands.org.au/standards/rif-cs/registryObjects" xsi:schemaLocation="http://ands.org.au/standards/rif-cs/registryObjects http://services.ands.org.au/documentation/rifcs/schema/registryObjects.xsd">
<registryObject xmlns="http://www.openarchives.org/OAI/2.0/" group="NII">
我的代码如下所示:
<xsl:template match="oai:record">
<record>
<xsl:element name="registryObjects" namespace="http://ands.org.au/standards/rif-cs/registryObjects">
<xsl:attribute name="xsi:schemaLocation">
<xsl:text>http://ands.org.au/standards/rif-cs/registryObjects http://services.ands.org.au/documentation/rifcs/schema/registryObjects.xsd</xsl:text>
</xsl:attribute>
<registryObject>
等
是否可以在registryObjects
之后更改所有元素的命名空间?
答案 0 :(得分:1)
当你这样做时:
<xsl:element name="registryObjects" namespace="http://ands.org.au/standards/rif-cs/registryObjects">
您将registryObjects
放在指定的命名空间中 - 但您没有更改默认命名空间。
因此,后代元素(示例中为registryObject
)继承默认命名空间当前在范围 - 根据您的结果,恰好是{ {1}}(您还没有向我们展示完整的样式表)。
这里的简单解决方案是使用文字结果元素。而不是:
"http://www.openarchives.org/OAI/2.0/"
做的:
<xsl:element name="registryObjects" namespace="http://ands.org.au/standards/rif-cs/registryObjects">
<xsl:attribute name="xsi:schemaLocation">
<xsl:text>http://ands.org.au/standards/rif-cs/registryObjects http://services.ands.org.au/documentation/rifcs/schema/registryObjects.xsd</xsl:text>
</xsl:attribute>
<registryObject>
这不仅会将<registryObjects xmlns="http://ands.org.au/standards/rif-cs/registryObjects"
xsi:schemaLocation="http://ands.org.au/standards/rif-cs/registryObjects http://services.ands.org.au/documentation/rifcs/schema/registryObjects.xsd">
<registryObject>
放在指定的命名空间中,还会更改默认命名空间,以便registryObjects
继承它。
在不更改默认命名空间的情况下,您必须将registryObject
放置在指定的命名空间显式中,例如:
registryObject
或:
<registryObject xmlns="http://ands.org.au/standards/rif-cs/registryObjects">
值得注意的是,在您向我们展示的预期结果文档中,所有元素都在<xsl:element name="registryObject" namespace="http://ands.org.au/standards/rif-cs/registryObjects">
命名空间中(由根"http://www.openarchives.org/OAI/2.0/"
元素默认建立) ) - 除了 OAI-PMH
和registryObjects
,它们位于自己的registryObject
命名空间中(由"http://ands.org.au/standards/rif-cs/registryObjects"
元素默认设置)。