样式表正在打印数据。为什么?

时间:2013-05-06 14:40:31

标签: xslt xpath xslt-1.0 xslt-2.0

我真的无法理解这一点。在下面运行我的样式表时,为什么打印我的参数(请参阅下面的XML中的参数)?这是唯一被印刷的东西。我希望什么都不打印。输出是

trueSelskapet1000548

样式表:

<xsl:template match="/">
    <xsl:apply-templates/>      
</xsl:template>

<xsl:template match="verticaldata/menuitems/menuitem">

</xsl:template>

源XML(仅限开头,有效):

<verticaldata>
    <context languagecode="en">
        <querystring/>
    </context>
    <menuitems istop="yes">
        <menuitem key="548" menukey="0" modifier="CF9FEC4718E41289CF71F83EC7C8983AA9C76E10" order="57" owner="5C2894E9CAD0B5B7B9DACE714D67651570BD1DD6" timestamp="2013-05-02 16:36" type="content" visible="yes">
            <name>NAME</name>
            <subtitle>NAME</subtitle>
            <description/>
            <keywords/>
            <parameters>
                <parameter name="pageRelationType" override="false">Selskapet</parameter>
                <parameter name="subMenuItem" override="false">true</parameter>
                <parameter name="centreColumnHeight" override="false">1000</parameter>
            </parameters>
            <data cachedisabled="true"/>

我不知道。

编辑:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet [
    <!ENTITY nbsp "&#160;">
    ]>
<xsl:stylesheet
    version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:portal="http://www.enonic.com/cms/xslt/portal"
    exclude-result-prefixes="#all">

    <xsl:output indent="no" method="html" omit-xml-declaration="yes"/>    
    <xsl:output indent="no" method="html" omit-xml-declaration="yes"/>

1 个答案:

答案 0 :(得分:2)

快速说明:前进,创建问题,贡献者可以轻松复制/粘贴您提供的XML,XSLT等(即确保其格式正确)。如果不这样做会造成不必要的挫败感,从而导致您的问题被忽略。

随着说:

您看到的结果是100%预期,并归因于built-in template rule(强调我的):

  

当xsl:apply-templates选择节点时,没有   样式表中可用于处理该节点的模板规则,   而是评估内置模板规则。内置模板   文档节点和元素节点的规则导致子节点   要处理的节点; 文本节点和属性的内置规则   节点导致文本被复制到结果树。

以后:

  

文本和属性节点的内置模板规则返回文本   包含上下文节点的字符串值的节点,除非   字符串值是零长度,在这种情况下它返回一个空   序列。这是有效的:

<xsl:template match="text()|@*" mode="#all">
  <xsl:value-of select="."/>
</xsl:template>

因此,由于您尚未定义直接寻址那些文本节点的模板,因此隐式调用了文本节点的内置模板;因此,您将获得该文本的字符串值。