<xsl-template>显示奇怪的结果

时间:2017-07-21 10:19:49

标签: xml xslt

我有一个像这样的样本xml:

<?xml version="1.0" encoding="UTF-8"?>
<collection> 
    <cd>
        <title>Boys for Pele</title>
        <artist>Tori Amos</artist>
        <tracks>
            <track type="vocal">
                <name>Horses</name>
                <length>3.5</length>
            </track>
            <track type="instrumental">
                <name>Blood roses</name>
                <length>3.2</length>
            </track>
            <track type="vocal">
                <name>Father lucifer</name>
                <length>3.8</length>
            </track>
            <track type="instrumental">
                <name>Professional widow</name>
                <length>4.1</length>
            </track>
            <track type="vocal">
                <name>Mr. Zebra</name>
                <length>3.6</length>
            </track>
        </tracks>
    </cd> 
</collection>

我使用示例xsl进行测试:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/"/>      
</xsl:stylesheet>

问题是&#39; <xsl:template match="/"/>&#39;码。 当我测试它时,没有任何结果 当我用&{39; <xsl:template match="collection/cd"/>替换它时,仍然没有任何结果 但是当我用&#39; <xsl:template match="collection/cd/tracks"/>&#39;替换它时, 出现以下结果: -

  

Pele Tori Amos的男孩寻找Crash TestDummies的幽灵

但是这个值不在xml的元素内,在它之外。

有人可以提供一些帮助吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

您的空模板会覆盖默认模板by default copies all text。模板的操作是 nothing ,因此省略了它匹配的任何内容,不匹配的任何内容都会回退到默认值。

  

匹配= “/”

处理引擎到达您的root用户模板并应用它,导致空输出。

  

匹配= “收集/ CD”

处理引擎在复制节点中的所有(缺少)文本后到达您的模板,导致空输出。

  

匹配= “收集/ CD /磁道”

处理引擎在复制了<title><artist>标记中的所有文字后到达您的模板,然后将“不执行任何操作”规则应用于<tracks>,从而产生标题 - text artist-text title-text artist-text ... result。