XSLT 不适用于 docbook xmlns
XSLT did not work with docbook xmlns
我完全不熟悉 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 吗?
您必须在 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>
我完全不熟悉 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 吗?
您必须在 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>