0
的DocBook XSL模板包括匹配所有元素重寫匹配=「*」從DocBook XSL
<xsl:template match="*">
<xsl:message> .... </xsl:message>
</xsl:template>
我需要,因爲我的源XML樹包含更多的只是在DoocBook XML與其他模板來覆蓋它的模板。如果我在文件中指定了這樣的模板,它將覆蓋DocBook XSL中的所有模板。似乎所有導入的模板都按照導入順序排列優先級,而不是根據模板的具體情況。
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:db="http://docbook.org/ns/docbook" version="1.0">
<xsl:import href="docbook-xsl-ns/xhtml/docbook.xsl" />
<xsl:import href="copy.xsl"/>
<xsl:template match="/">
<xsl:apply-templates select="//db:book"/>
</xsl:template>
</xsl:stylesheet>
copy.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<!-- go process attributes and children -->
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
示例XML源
<?xml version="1.0" encoding="UTF-8"?>
<root>
<http-host>localhost</http-host>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:svg="http://www.w3.org/2000/svg" xmlns:m="http://www.w3.org/1998/Math/MathML" xml:id="course.528" xml:lang="en" version="5.0">
<info>
<title>Postoperative Complications</title>
</info>
<chapter xml:id="chapter.1">
<title>INTRODUCTION</title>
<para>Postoperative complications are a constant threat to the millions ....</para>
</chapter>
</book>
<errors></errors>
</root>
這對於Xalan和xsltproc的處理器如此。如何覆蓋此模板而無需更改DocBook XSL源代碼。我試圖搞清優先次序,但這並不奏效。
這是更多的工作,但我認爲這將適用於我的情況; DocBook的所有元素都在一起,其餘都是來自本地命名空間的自定義元素。 但是,爲什麼在通用模板之前導入的更多特定模板未得到應用。稍後導入的常規模板將覆蓋它們全部。有沒有辦法來覆蓋這種行爲?如果我要做到這一點,有沒有辦法看到進口時的優先事項? – 2009-10-15 15:18:25