0

这是 XML 文件:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="2.xsl" ?>


<root>
    <shop>
        <person> 
            <employee> 
                <name> Alexis </name> 
                <role> Manager </role> 
                <task> Sales </task> 
            </employee> 

            <employee>
                <name> Employee2 </name>
            </employee>
        </person>

        <employee>
            <name> Blake2 </name>
        </employee>

    </shop>



    <person> 
        <employee2>
            <role2> Supervisor </role2> 
            <name2> Blake </name2> 
            <task2> Control </task2> 
        </employee2>
    </person>
</root>

这是 XSLT 文件:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">



<xsl:template match="root"> 
<html><head></head> 
<body>
Start of root in XSLT <p/> <xsl:apply-templates select="person" /> <p/>

End of root in XSLT

</body> 
</html> 
</xsl:template> 



<xsl:template match="shop">
"Step 1 start"
<xsl:apply-templates select="*/*"/>
"Step 1 done" <p/>
</xsl:template> 



<xsl:template match="employee"> 
<u> <xsl:apply-templates select="name"/> </u> 
(Task: <xsl:apply-templates select="task"/>) 
<br></br> 
</xsl:template> 


</xsl:stylesheet>

输出是:

XSLT 中 root 的开始

监督布莱克控制

XSLT 中根的结尾

我的问题是,为什么 Alexis 和 Employee2 不是输出的一部分?他们都在<person>元素之下......

4

2 回答 2

0

但你不想要任何人吗?如果你这样做但不知道怎么说,只需稍微斜线一下,比如<xsl:apply-templates select="//person" />

于 2012-06-10T08:53:36.443 回答
0

<xsl:template match="root">应用于<root>元素。在那里,<xsl:apply-templates select="person" />选择作为<person>当前节点的直接子节点的元素(根元素<root>)。由于没有为<person>自身定义模板,因此执行 XSLT 的默认行为,这意味着只复制文本节点。

其他模板根本不执行,因为根级别没有<shop>or<employee>元素(相对于文档本身),并且模板也不是通过调用<apply-templates>的。

为了更明确地回答您的问题,第一个<person>元素不会被选中,因为它嵌套在另一个元素中,但您的<apply-templates>指令仅选择<person>在当前节点中直接可见的元素。

于 2012-06-10T09:02:45.930 回答