2016-04-26 18 views
1

Ich möchte XPath verwenden, um einige Knoten auszuwählen, die mit demselben Wort enden, und zu überprüfen, ob sie alle gleich sind. So zum BeispielÜberprüfen, ob Menge der Knoten gleich sind XPath 1.0

<a> 
    <b-token>123456789</b-token> 
    ... 
    <c> 
     <d> 
      <d-token>123456789</d-token> 
      ... 
     </d> 
     <e> 
      <e-token>123456789</e-token> 
      ... 
     </e> 
     <f> 
      <f-token>123456789</f-token> 
      ... 
     </f> 
    <c> 
</a> 

Also, ich möchte für alle Knoten suchen, die auf „-token“ und stellen Sie sicher, dass sie gleichwertig sind. Kann das in XPath 1.0 gemacht werden? 2.0? XSD? Hier

ist ein Beispiel XPath, die ich hätte zwar gearbeitet, aber es funktioniert nicht

String xpathExpression = "/descendant-or-self::node()/*[substring(name(), string-length(name()) - (string-length('token')-1)) = 'token'] = /descendant-or-self::node()/*[substring(name(), string-length(name()) - (string-length('token')-1)) = 'token']"; 

Es funktioniert, wenn ich einen bestimmten Wert setzen nach dem ‚=‘ wie folgt:

String xpathExpression = "/descendant-or-self::node()/*[substring(name(), string-length(name()) - (string-length('token')-1)) = 'token'] = '123456789'"; 

Ich verwende Java 7, wenn es darauf ankommt.

Dank

Antwort

0

Wenn Sie not(//*[substring(local-name(), string-length(local-name()) - 5) = '-token'] != //*[substring(local-name(), string-length(local-name()) - 5) = '-token']) verwenden dann diesen Vergleich so lange wahr gibt als all jene Elemente, die gleiche Zeichenfolge-Wert und falsch, wenn mindestens ein Element gibt, deren Inhalt Zeichenfolge ist nicht gleich.

+0

Es scheint mir, dass dies funktioniert; Ich folge jedoch nicht warum. Es scheint, dass Sie einfach das Gegenteil von dem gemacht haben, was zu vergleichen ist, wenn die zwei Knotenmengen '! =' Sind, und dann nehmen Sie das Gegenteil von diesem booleschen Wert, indem Sie alles in 'not()' einschließen. Für mich sind sie logisch gleich, aber anscheinend nicht. – jediwompa

+0

Mit XPath ist der Vergleich '$ node-set1! = $ Node-set2' wahr, wenn mindestens ein Element in '$ node-set1' nicht (mindestens) ein Element in' $ node-set2' ist. Und mit der Negation 'not ($ node-set1! = $ Node-set2)' stellen wir sicher, dass alle Elemente gleich sind. Siehe https://www.w3.org/TR/xpath/#boooleans, das sagt "Wenn beide zu vergleichenden Objekte Knoten-Sets sind, dann ist der Vergleich wahr, wenn und nur wenn es einen Knoten im ersten Knoten gibt- setze und einen Knoten in der zweiten Knotenmenge so, dass das Ergebnis des Vergleichs der Stringwerte der beiden Knoten wahr ist. ". –

+0

OK, Danke für die gründliche Erklärung! Ich würde upvote, aber ich bin im Moment ein wenig Peon. – jediwompa