XSLT无法与docbook xmlns一起使用

时间:2017-09-09 09:57:44

标签: xslt xslt-1.0 docbook docbook-5

我对xslt全新,并尝试制作简单的XSLT,将docbook5转换为fb2/fb3以及我需要的其他格式。 但是我发现了一些我无法理解的问题 - 如果<book>标记有xmlns="http://docbook.org/ns/docbook" xslt不起作用。 docbook(db.docbook)的最小示例:

<?xml version="1.0" encoding="UTF-8"?>
 <book xml:id="simple_book" version="5.0"
    xml:lang="ru"
    xmlns="http://docbook.org/ns/docbook"
    xmlns:xlink="http://www.w3.org/1999/xlink"
 >
  <info>
   <title>An Example Book</title>
  </info>
 </book>

和XSLT(xsl / example.xsl):

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <tag><xsl:value-of select="/book/info/title"/></tag>
</xsl:template>

</xsl:stylesheet>

我尝试xsltproc

xsltproc xsl/example.xsl db.docbook

和撒克逊

saxon-xslt db.docbook xsl/example.xsl

在Debian GNU / Linux 9.1中,但得到了

<?xml version="1.0"?>
<tag/>

如果我在docbook中删除xmlns:

<?xml version="1.0" encoding="UTF-8"?>
 <book xml:id="simple_book" version="5.0"
    xml:lang="ru"
    xmlns:xlink="http://www.w3.org/1999/xlink"
 >
  <info>
   <title>An Example Book</title>
  </info>
 </book>

两个处理器都能正确输出:

<?xml version="1.0"?>
<tag>An Example Book</tag>

可能有人知道怎么make xslt而不删除xlmns?

1 个答案:

答案 0 :(得分:0)

您必须在XSLT中声明命名空间并使用它:

<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:db="http://docbook.org/ns/docbook">

  <xsl:template match="/">
    <tag><xsl:value-of select="/db:book/db:info/db:title"/></tag>
  </xsl:template>

</xsl:stylesheet>