2013-04-11 67 views
0

我正在学习考试,我想确保我正确理解这一点。下列内容会打印出ABC还是BC,因为这些模板并未应用于next/previous/item?XSLT练习示例

的input.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<next> 
    <previous> 
     <item>A</item> 
    </previous> 
    <item>B</item> 
    <item>C</item> 
</next> 

input.xsl:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
     <HowDoes> 
      <xsl:apply-templates select="next/item" /> 
      <xsl:apply-templates select="previous/item" /> 
     </HowDoes> 
    </xsl:template> 
    <xsl:template match="item"> 
     <ThisWork> 
      <xsl:copy-of select="." /> 
     </ThisWork> 
    </xsl:template> 
</xsl:stylesheet> 
+2

看看这里:http://xsltcake.com/slices/EeAoyt – joshcomley 2013-04-11 11:13:08

+0

这是一个很棒的工具;谢谢! – Lebowski156 2013-04-11 11:22:45

+0

不客气! – joshcomley 2013-04-11 11:54:40

回答

0

样式表会忽略A因为,从文档的根的角度来看(其中第一个模板相匹配),有两个next/item节点,但是没有previous/item节点。只有一个next/previous/item节点。

如果你改变了你的模板

<xsl:template match="/"> 
    <HowDoes> 
     <xsl:apply-templates select=".//item" /> 
    </HowDoes> 
</xsl:template> 

那么所有item节点会被发现,因为它是寻找替代previous儿童的一切item孩子当前节点的所有item后代