我有一个巨大的XML文件,想将其拆分成单个的XML文档;每个单独的XML文件都应该在适用的位置有一个显式的命名空间声明,如下面“期望的输出”部分所示。然而,我一直收到错误“namespace error: Namespace prefix bd on keyword is not defined”。
我的问题是,我如何明确告诉我的XSLT处理器在结果输出中放置命名空间声明?我已经查阅了几个在线教程,但我无法完全弄清楚如何解决这个问题。
部分XSLT片段
我希望命名空间只出现在书籍节点内。请参见下面的示例:
我的问题是,我如何明确告诉我的XSLT处理器在结果输出中放置命名空间声明?我已经查阅了几个在线教程,但我无法完全弄清楚如何解决这个问题。
部分XSLT片段
...
...
<xsl:template match="chapter">
<bd:chapter>
<xsl:apply-templates select="name" />
<xsl:apply-templates select="page" />
</bd:chapter>
</xsl:template>
<xsl:template match="name">
<bd:name>
<xsl:value-of select="." />
</bd:name>
</xsl:template>
...
...
期望的输出
<?xml version="1.0" encoding="utf-8" ?>
<books>
<bd:book xmlns:bd="http://www.bd.org.za/db" xmlns:cd="http://www.bd.org.za/cd">
<bd:name>book01</bd:name>
<bd:chapter>
<cd:name>chapter01<cd:name>
<bd:page>
<cd:title></cd:title>
<pd:description></pd:description>
</bd:page>
</bd:chapter>
</bd:book>
...
...
...
</books>
更新 #1
<?xml version="1.0" encoding="utf-8" ?>
<books>
<book>
<name>book01</name>
<chapter>
<name>chapter01<name>
<page>
<title></title>
<description></description>
</page>
</chapter>
</book>
...
...
...
</books>
更新 #2
@polishchuk 更新2的结果如下
<?xml version="1.0"?>
<root xmlns:pd="namespace2">
<pd:Book xmlns:pd="http://namespace1.org/">
<pd_1:Name xmlns:pd="namespace2" xmlns:pd_1="http://namespace1.org/">A</pd_1:Name>
<pd:Description xmlns:pd="namespace2">A1</pd:Description>
</pd:Book>
<pd:Book xmlns:pd="http://namespace1.org/">
<pd_1:Name xmlns:pd="namespace2" xmlns:pd_1="http://namespace1.org/">B</pd_1:Name>
<pd:Description xmlns:pd="namespace2">B1</pd:Description>
</pd:Book>
</root>
我希望命名空间只出现在书籍节点内。请参见下面的示例:
<?xml version="1.0"?>
<root>
<pd:Book xmlns:pd="http://namespace1.org/">
<pd:Name >A</pd:Name>
<pd:Description>A1</pd:Description>
</pd:Book>
<pd:Book xmlns:pd="http://namespace1.org/">
<pd:Name>B</pd_1:Name>
<pd:Description>B1</pd:Description>
</pd:Book>
</root>
<root xmlns:pd="namespace2">
或者书籍节点<pd:Book xmlns:pd="namespace2">
中定义名称空间,对于 XML 解析器来说这两者是相等的。 - Kirill Polishchuk