检查同一节中是否还有更多节点

时间:2014-07-31 10:25:27

标签: xslt xslt-2.0

我有以下类型的XML结构

<root>
    <Section>
     <A></A>
     <B></B>
     <A></A>
    </Section>
    <Section>
     <A></A>
     <B></B>
     <A></A>
    </section>
   </root>

在每个部分下面有2个标记,即AB,但也有2个A个节点,  在这里,我想检查XPATH(XSLT2.0),如果在A下有任何前面的Section,当我使用Preceding::A时,它正在选择所有内容,即它不检查它是否是是在相同的部分或不同的,但它正在检查是否有前一个A,但我想检查同一个A中的前一个Section,请告诉我怎么能我这样做。

由于

2 个答案:

答案 0 :(得分:1)

我认为您只想查看preceding-sibling::A

答案 1 :(得分:0)

如果A元素都是兄弟姐妹,则preceding-sibling::A的{​​{3}}是最简单的元素。或者,如果为第一个和后续A元素定义单独的模板,您可以让模板匹配器为您完成工作

<xsl:template match="A[1]">
  <!-- fires for the first A in each section -->
</xsl:template>

<xsl:template match="A">
  <!-- fires for A elements other than the first one -->
</xsl:template>

如果A元素可以处于不同的级别,例如

<root>
 <Section>
  <A></A>
  <B></B>
  <A></A>
 </Section>
 <Section>
  <A></A>
  <B><A/></B>
  <C><A></A></C>
 </Section>
</root>

然后你需要对过滤更有创意。在&#34;文件顺序&#34;在其父元素后,子元素被视为,因此您可以执行类似

的操作
preceding::A[. >> current()/ancestor::Section[1]]

(即文档顺序中当前节点最近的A祖先后面的所有前面的Section元素。