我有一个简单的xslt脚本:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/package">
<xsl:copy-of select="*"/>
</xsl:template>
</xsl:stylesheet>
当应用于以下示例时
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<package
xmlns="http://www.idpf.org/2007/opf"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/"
version="3.0"
xml:lang="en"
unique-identifier="pub-identifier"
>
<metadata>
<dc:identifier id="pub-identifier">_idm462750791920</dc:identifier>
<meta id="meta-identifier" property="dcterms:identifier">_idm462750791920</meta>
</metadata>
</package>
产生非感性结果
<?xml version="1.0"?>
_idm462750791920
_idm462750791920
请注意,我没有使用与dc命名空间相关的元素,因此可以正常运行。例如,如果我使用:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<package
xmlns="http://www.idpf.org/2007/opf"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/"
version="3.0"
xml:lang="en"
unique-identifier="pub-identifier"
>
<metadata>
asdfasdfads
</metadata>
</package>
所以它似乎正在认识到&#34;包&#34;元素并按照我的预期行事。
我该怎么办才能使这项工作?
答案 0 :(得分:0)
请注意,我没有使用与dc命名空间相关的元素,因此可以正常运行。
你在期待什么?这将导致以下输出:
<?xml version="1.0" encoding="utf-8"?>
asdfasdfads
如果正确选择了<xsl:copy-of select="*"/>
,那么/package
对我的期望不是什么。
不,对不起,没有。您所看到的是XSLT's built-in template rules的结果。所以它似乎正在认识到&#34;包&#34;元素并按照我的预期行事。
/package
元素位于默认命名空间http://www.idpf.org/2007/opf
中。您可以做的是将该命名空间uri绑定到前缀并在XPath中使用它(在match
中)。
注意:只要uri相同,您使用的前缀并不重要。
示例...
XSLT 1.0
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:opf="http://www.idpf.org/2007/opf">
<xsl:template match="/opf:package">
<xsl:copy-of select="*"/>
</xsl:template>
</xsl:stylesheet>
输出您的第一个输入示例:
<metadata xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/">
<dc:identifier id="pub-identifier">_idm462750791920</dc:identifier>
<meta id="meta-identifier" property="dcterms:identifier">_idm462750791920</meta>
</metadata>
输出您的第二个输入示例:
<metadata xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/">
asdfasdfads
</metadata>
如果其中任何一项与您预期输出的不同,请使用您期望/想要的确切输出更新您的问题。