这是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
主管Blake Control
XSLT中的根目录
我的问题是,为什么Alexis和Employee2不是输出的一部分?它们都属于<person>
元素......
答案 0 :(得分:0)
但你不想只是任何的人吗?如果你这样做但却不知道怎么说,只需稍微削减一下,比如<xsl:apply-templates select="//person" />
答案 1 :(得分:0)
<xsl:template match="root">
已应用于<root>
元素。在那里,<xsl:apply-templates select="person" />
选择<person>
元素作为当前节点的直接子节点(根元素<root>
)。由于没有为<person>
本身定义模板,因此执行XSLT的默认行为,这意味着只复制文本节点。
其他模板根本没有执行,因为根级别上没有<shop>
或<employee>
元素(相对于文档本身),并且不会通过{{1}调用模板,或者。
为了更明确地回答您的问题,第一个<apply-templates>
元素未被选中,因为它嵌套在另一个元素中,但您的<person>
指令仅选择直接可见的<apply-templates>
元素在当前节点中。