2010-03-02 6 views
1

Puis-je fractionner un niveau d'un document XML avec une expression XPath dans une liste? J'ai cela, par exemple:Division du niveau XML selon XPath

<root> 
    <test1 /> 
    <testX /> 
    <test2 /> 
    <test21 /> 
    <testX /> 
    <test3 /> 
</root> 

donc en cours d'exécution sur cette retourne une liste avec <test1 />, <test2 /><test21 /> et <test3 />.

Il n'y a pas nécessairement un seul nœud entre <testX />, il peut y avoir un nombre variable.

Répondre

2

Recherchez le premier élément sous root et le premier élément qui suit chaque élément "testX". Sauf les éléments nommés "testX".

(/root/*[1] | /root/*['testX' = name(preceding-sibling::*[1]))[name() != 'testX'] 

Quelques liens MSDN sur XPath:

+0

Ce n'est pas nécessairement tous les deuxièmes nœuds. Il peut y avoir un très grand nombre d'éléments entre les éléments textX –

+0

J'ai élaboré ma question initiale –

0
/root/*[not(self::testX)] 

choisirait

<test1 /> 
<test2 /> 
<test21 /> 
<test3 />