XSL-简单示例失败

时间:2016-08-19 18:00:49

标签: xslt

我有一个简单的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;元素并按照我的预期行事。

我该怎么办才能使这项工作?

1 个答案:

答案 0 :(得分:0)

  

请注意,我没有使用与dc命名空间相关的元素,因此可以正常运行。

你在期待什么?这将导致以下输出:

<?xml version="1.0" encoding="utf-8"?>

        asdfasdfads

如果正确选择了<xsl:copy-of select="*"/>,那么/package对我的期望不是什么。

  

所以它似乎正在认识到&#34;包&#34;元素并按照我的预期行事。

不,对不起,没有。您所看到的是XSLT's built-in template rules的结果。

/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>

如果其中任何一项与您预期输出的不同,请使用您期望/想要的确切输出更新您的问题。

相关问题