【问题】
docbook中的某个xsl的配置如下:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:ng="http://docbook.org/docbook-ng"
xmlns:db="http://docbook.org/ns/docbook"
exclude-result-prefixes="db ng exsl"
version='1.0'>
<xsl:import href="/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1/fo/docbook.xsl"/>
<xsl:param name="admon.graphics.path">/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1/images/</xsl:param>
</xsl:stylesheet>想要将其中的路径:
/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1
定义为一个实体,这样方便以后引用。
【解决过程】
1.对于docbook中的xml的实体定义,是知道的。
可以参考这里:
写出类似的实体定义:
<!ENTITY xsl_ns_base_dir "/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1">
但是此处是xsl文件,不是xml,所以行不通。
2.后来参考:
Define entity in style sheet
中的解释,写出了这样的:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:ng="http://docbook.org/docbook-ng"
xmlns:db="http://docbook.org/ns/docbook"
exclude-result-prefixes="db ng exsl"
version='1.0'>
<!DOCTYPE stylesheet [
<!ENTITY xsl_ns_base_dir "/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1">
]>
<!-- <xsl:import href="/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1/fo/docbook.xsl"/> -->
<xsl:import href="&xsl_ns_base_dir;/fo/docbook.xsl"/>
<!-- <xsl:param name="admon.graphics.path">/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1/images/</xsl:param> -->
<xsl:param name="admon.graphics.path">&xsl_ns_base_dir;/images/</xsl:param>
</xsl:stylesheet>结果编译始终出错:
CLi@PC-CLI-1 ~/develop/docbook/books/VBR/VBR/src
$ xsltproc.exe --xinclude -o ../output/fo/MPEG_VBR.fo /home/CLi/develop/docbook/config/docbook-xsl-ns-1.76.1/fo/docbook_crl.xsl MPEG_VBR.xml
/home/CLi/develop/docbook/config/docbook-xsl-ns-1.76.1/fo/docbook_crl.xsl:11: parser error : StartTag: invalid element name
<!DOCTYPE stylesheet [
^
/home/CLi/develop/docbook/config/docbook-xsl-ns-1.76.1/fo/docbook_crl.xsl:12: parser error : StartTag: invalid element name
<!ENTITY xsl_ns_base_dir "/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1"
^
/home/CLi/develop/docbook/config/docbook-xsl-ns-1.76.1/fo/docbook_crl.xsl:138: parser error : Entity 'xsl_ns_base_dir' not defined
<xsl:param name="admon.graphics.path">&xsl_ns_base_dir;/images/</xsl:param>
^
cannot parse /home/CLi/develop/docbook/config/docbook-xsl-ns-1.76.1/fo/docbook_crl.xsl后来折腾了好多次,终于搞清楚了,把DOCTYPE写在最开始的部分,就可以了:
<?xml version='1.0'?>
<!DOCTYPE stylesheet [
<!ENTITY xsl_ns_base_dir "/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1">
]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:ng="http://docbook.org/docbook-ng"
xmlns:db="http://docbook.org/ns/docbook"
exclude-result-prefixes="db ng exsl"
version='1.0'>
<!-- <xsl:import href="/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1/fo/docbook.xsl"/> -->
<xsl:import href="&xsl_ns_base_dir;/fo/docbook.xsl"/>
<!-- <xsl:param name="admon.graphics.path">/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1/images/</xsl:param> -->
<xsl:param name="admon.graphics.path">&xsl_ns_base_dir;/images/</xsl:param>
</xsl:stylesheet>
【总结】
想要在xsl中定义实体的话,首先写出对应定义:
<!ENTITY xsl_ns_base_dir "/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1">
然后将DOCTYPE的部分:
<!DOCTYPE stylesheet [ <!ENTITY xsl_ns_base_dir "/home/CLi/develop/docbook/tools/docbook-xsl-ns-1.76.1"> ]>
放在
<?xml version=’1.0′?>
之后,
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:ng="http://docbook.org/docbook-ng"
xmlns:db="http://docbook.org/ns/docbook"
exclude-result-prefixes="db ng exsl"
version='1.0'>之前,然后后面就可以通过:
| &xsl_ns_base_dir; |
的方式去引用了。
其中,即使在双引号之内的引用:
<xsl:import href="&xsl_ns_base_dir;/fo/docbook.xsl"/>
也是支持的。
转载请注明:在路上 » 【已解决】如何给(docbook中的)xsl中定义实体Entity