XSLT模板匹配'中'孩子

时间:2015-11-24 17:16:29

标签: xml xslt

我是XSLT的新手,并且正在徘徊如何匹配'中间'孩子/兄弟节点? (所以基本上所有那些不是第一个或最后一个)

例如,假设我有以下xml ....

<FRUITS>
  <FRUIT>Apple</FRUIT>
  <FRUIT>Pear</FRUIT>     <!--I want to match this in a template-->
  <FRUIT>Banana</FRUIT>   <!--I want to match this in a template-->
  <FRUIT>..........</FRUIT>
</FRUITS> 

上面的例子只是我正在处理的xml的一个非常简短的例子。然而在真正的xml中我永远不会知道有多少水果兄弟姐妹。所以换句话说,我希望构建一个语句来识别节点是否有兄弟姐妹和兄弟姐妹在一起。我看了下面的内容但没有快乐,因为语法不正确.....

<xsl:template match="FRUIT[preceding-sibling::FRUIT*]/[following-sibling::FRUIT*]" />

还有......

<xsl:template match="FRUIT[preceding-sibling::FRUIT*] and [following-sibling::FRUIT*]" />

这是使用XSLT 1.0

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

您还可以检查第一个和最后一个位置

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <xsl:apply-templates select="/FRUITS/FRUIT"/>
    </xsl:template>
    <xsl:template match="FRUIT[position() != 1 and position() != last()]">
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="*"/>
</xsl:stylesheet>

答案 1 :(得分:1)

即将结束,请使用match="FRUIT[preceding-sibling::FRUIT and following-sibling::FRUIT]"