我有以下类型的XML结构
<root>
<Section>
<A></A>
<B></B>
<A></A>
</Section>
<Section>
<A></A>
<B></B>
<A></A>
</section>
</root>
在每个部分下面有2个标记,即A
和B
,但也有2个A
个节点,
在这里,我想检查XPATH(XSLT2.0),如果在A
下有任何前面的Section
,当我使用Preceding::A
时,它正在选择所有内容,即它不检查它是否是是在相同的部分或不同的,但它正在检查是否有前一个A
,但我想检查同一个A
中的前一个Section
,请告诉我怎么能我这样做。
由于
答案 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
元素。