4

我正在为 phpdoc 2 创建一个模板,我试图弄清楚xmlns="http://www.w3.org/1999/xhtml"当从我的模板创建文档时如何防止该属性被添加到生成的 HTML 的根级元素中。我在模板中的 .xsl 文件会生成包含 html 片段的文件,这就是<html>标签不是根级别元素的原因。看来 phpdoc 2 使用 XSLT v1.0,所以这限制了我的选择。经过一番搜索,最常见的答案是使用每个 .xsl 文件标签exclude-result-prefixes上的属性<xsl:stylesheet>,并将其值设置为#allor #default,因为您不能仅将xmlns其用作命名空间来直接排除。但我试过了,exclude-result-prefixes在我的模板中设置每个 .xsl 文件,但它不起作用。

根据要求,这是我的 .xsl 文件之一,api-doc.xsl:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.w3.org/1999/xhtml" 
    exclude-result-prefixes="#all">

    <xsl:output indent="no" method="html"/>

    <xsl:include href="chrome.xsl"/>

    <xsl:include href="api-doc/property.xsl"/>
    <xsl:include href="api-doc/class.xsl"/>
    <xsl:include href="api-doc/constant.xsl"/>
    <xsl:include href="api-doc/function.xsl"/>
    <xsl:include href="api-doc/docblock.xsl"/>
    <xsl:include href="api-doc/file.xsl"/>

    <xsl:template name="content">
        <xsl:apply-templates select="/project/file[@path=$path]"/>
    </xsl:template>

</xsl:stylesheet>

这是 api-doc/file.xsl 的片段:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.w3.org/1999/xhtml" 
    exclude-result-prefixes="#all">

    <xsl:output indent="no" method="html"/>

    <xsl:template match="file">
        <div class="text-content">
            <!-- ... -->
        </div>
    </xsl:template>

</xsl:stylesheet>

元素<div class="text-content"></div>xmlns="http://www.w3.org/1999/xhtml"添加了属性的元素。

4

2 回答 2

3

就像 Michael Kay 所说,如果您不希望div在 xhtml 命名空间中,xmlns="http://www.w3.org/1999/xhtml"请从您的xsl:stylesheet.

否则,您可以使用构建元素xsl:element并为其提供一个空的命名空间:

    <xsl:element name="div" namespace="">
        <xsl:attribute name="class">text-content</xsl:attribute>
        <xsl:text>...</xsl:text>
    </xsl:element>
于 2013-04-07T20:15:07.760 回答
2

示例中的<div>文字结果元素位于命名空间http://www.w3.org/1999/xhtml中。如果您不希望它在那个命名空间中,那么不要把它放在那个命名空间中。

于 2013-04-07T20:08:08.087 回答