首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XSL-简单示例失败

XSL-简单示例失败
EN

Stack Overflow用户
提问于 2016-08-20 02:00:49
回答 1查看 37关注 0票数 0

我有一个简单的xslt脚本:

代码语言:javascript
复制
<?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>

当应用于下面的示例时,

代码语言:javascript
复制
<?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>

产生无意义的结果

代码语言:javascript
复制
<?xml version="1.0"?>


_idm462750791920
_idm462750791920

请注意,我没有使用与dc名称空间相关的元素,其工作方式与预期不谋而合。例如,如果我使用:

代码语言:javascript
复制
<?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>

因此,它似乎确实识别了"package“元素,并按照我的预期对其采取了行动。

我要怎么做才能让它工作呢?

EN

回答 1

Stack Overflow用户

发布于 2016-08-20 03:32:53

请注意,我没有使用与dc名称空间相关的元素,它的工作方式与预期不谋而合。

你在期待什么?这将产生以下输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>

        asdfasdfads

如果/package选择得当,这不是我对<xsl:copy-of select="*"/>的期望。

包,所以它看起来确实识别了“

”元素,并按照我的预期对其执行操作。

不,很抱歉它不是。你看到的是XSLT's built-in template rules的结果。

/package元素位于默认命名空间http://www.idpf.org/2007/opf中。您可以做的是将名称空间uri绑定到前缀,并在XPath中使用它(在match中)。

注意:您使用的前缀并不重要,只要uri是相同的即可。

例如。

XSLT 1.0

代码语言:javascript
复制
<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>

第一个输入示例的输出:

代码语言:javascript
复制
<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>

第二个输入示例的输出:

代码语言:javascript
复制
<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>

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39045196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档