【问题标题】:XML and XSLT apply-templates selectXML 和 XSLT 应用模板选择
【发布时间】:2012-06-10 08:45:03
【问题描述】:

这是 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 中根目录的开始

监督布莱克控制

XSLT 中根目录的结尾

我的问题是,为什么 Alexis 和 Employee2 不是输出的一部分?它们都在&lt;person&gt; 元素下.....

【问题讨论】:

    标签: xml select formatting xslt-1.0 apply-templates


    【解决方案1】:

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

    其他模板根本不执行,因为根级别没有&lt;shop&gt; 或&lt;employee&gt; 元素(相对于文档本身),模板也没有通过&lt;apply-templates&gt; 调用。

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

    【讨论】:

      【解决方案2】:

      但你不想要任何个人,对吗?如果您这样做但不知道怎么说,请稍微斜线一下,例如&lt;xsl:apply-templates select="//person" /&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-24
        • 2016-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多