【问题标题】:XSLT did not work with docbook xmlns [duplicate]XSLT 不适用于 docbook xmlns [重复]
【发布时间】:2017-09-09 09:57:43
【问题描述】:

我对 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>

可能有人知道如何在不删除 xlmns 的情况下制作 xslt?

【问题讨论】:

  • @JLRishe 是的,它看起来像同样的问题,但我不能说这个问题已经解决了。

标签: xslt xslt-1.0 docbook docbook-5


【解决方案1】:

您必须在 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>

【讨论】:

  • 谢谢,它的工作原理,但添加 xmlns 输出:&lt;tag xmlns:db="http://docbook.org/ns/docbook"&gt;An Example Book&lt;/tag&gt; 据我了解这不是我需要的
  • @AlexeyShrub 使用exclude-result-prefixes,如另一个问题所示。
  • @michael.hor257k 谢谢!
猜你喜欢
  • 2014-08-30
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
相关资源
最近更新 更多