2016-09-16 2 views
0

Ich habe die folgende XML-Struktur, wo DIV2 und DIV3 in DIV1 sind. Ich wollte die Anzahl der * Topic-Elemente unter DIV1 zählen, wenn mein Kontext DIV2/DIV3 ist.XPATH: Get Precedes Childrens

Also hier wollte ich "2" zurückgeben, da DIV1 2 Elemente (Atopic und Btopic) hat. Und geben Sie "2" zurück, da DIV1 2 Elemente (Atopic und Btopic) bei der Verwendung von DIV3 hat. Ähnlich sollte Kind von DIV4 "1" zurückgeben.

Die einzige Überlegung ist, den Körper/Sparte Kinder brauchen

Hilfe
<body> 
     <division> 
     ....DIV1.... 
     <Atopic> .. </Atopic> 
     <Btopic> .. </Btopic> 
      <division> 
       .....DIV2.......... 
       <Atopic> .. </Atopic> 
       <Btopic> .. </Btopic> 
      </division> 
      <division> 
       .....DIV3.......... 
       <Atopic> .. </Atopic> 
       <Btopic> .. </Btopic> 
      </division> 
     </division> 
     <division> 
     ....DIV4.... 
     <Ctopic> .. </Ctopic> 
     </division> 
    <body> 

pls gezählt und nicht die Division/Division werden diese über XPath zu erreichen.

Antwort

0

Die einzige Überlegung ist, den Körper/Abteilung Kinder gezählt und nicht die Division/Division

Ich denke sein müssen, die übersetzen würde: viel

<xsl:value-of select="count(ancestor::division[last()]/*[contains(name(), 'topic')])"/> 
+0

Dank ! Es funktioniert gut :) Ist es möglich, Btopic von der XPath-Logik auszuschließen, so dass es in beiden DIV-Fällen 1 zurückgibt. –

+0

Fügen Sie einfach ein weiteres Prädikat '[not (self :: Btopic)]' hinzu. –

+0

count (Vorfahr :: division [last()]/* [contains (name(), 'topic')] [nicht (self :: introtopic)]) ist das korrekt –