防止将xmlns =“”属性添加到XSLT 1.0生成的HTML元素中

时间:2013-04-07 18:48:54

标签: xslt xslt-1.0 xml-namespaces phpdoc

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

根据要求,这是我的一个.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"属性的内容。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

就像Michael Kay所说,如果您不想在xhtml命名空间中使用div,请从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>