我真的无法理解这一点。在下面运行我的样式表时,为什么打印我的参数(请参阅下面的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 " ">
]>
<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"/>
答案 0 :(得分:2)
快速说明:前进,请创建问题,贡献者可以轻松复制/粘贴您提供的XML,XSLT等(即确保其格式正确)。如果不这样做会造成不必要的挫败感,从而导致您的问题被忽略。
随着说:
您看到的结果是100%预期,并归因于built-in template rule(强调我的):
当xsl:apply-templates选择节点时,没有 样式表中可用于处理该节点的模板规则, 而是评估内置模板规则。内置模板 文档节点和元素节点的规则导致子节点 要处理的节点; 文本节点和属性的内置规则 节点导致文本被复制到结果树。
以后:
文本和属性节点的内置模板规则返回文本 包含上下文节点的字符串值的节点,除非 字符串值是零长度,在这种情况下它返回一个空 序列。这是有效的:
<xsl:template match="text()|@*" mode="#all">
<xsl:value-of select="."/>
</xsl:template>
因此,由于您尚未定义直接寻址那些文本节点的模板,因此隐式调用了文本节点的内置模板;因此,您将获得该文本的字符串值。