1

我真的无法理解这一点。在下面运行我的样式表时,为什么会打印我的参数(请参阅下面的 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"/>
4

1 回答 1

2

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

照这样说:

您看到的结果是 100% 预期的,并且归因于内置模板规则(强调我的):

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

而且,后来:

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

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

所以,因为你还没有定义一个直接寻址那些文本节点的模板,文本节点的内置模板被隐式调用;因此,您将获得该文本的字符串值。

于 2013-05-06T14:58:06.130 回答