2012-06-05 9 views
29

Ich habe einen XPath zur Auswahl einer Klasse, die ich möchte: //div[@class='myclass']. Aber es gibt mir die ganze div (mit <div class='myclass'> auch, aber ich würde nur den Inhalt dieses Tags zurückkehren möchten, ohne den Tag selbst. Wie kann ich es tun?Wie bekomme ich Knotenwert/innerHTML mit XPath?

Antwort

30

Mit xpath ist die Sache, die du zurückbekommen wirst, das letzte Ding im Pfad, das keine Bedingung ist. "Was das bedeutet? Nun, Bedingungen sind der Stoff zwischen [] 's (aber Sie wussten bereits, dass) und Ihre liest wie pathElement [, die eine' Klasse 'Attribut mit Wert' meine Klasse '] hat HElement kommt direkt vor der [.

All die Dinge außerhalb des [] ‚s, dann ist der Weg, so in //a/b/c[@blah='bleh']/da, b, c und d alle Elemente Weg sind, bla ein Attribut und bleh ein literaler Wert. Wenn dieser Pfad übereinstimmt, gibt es eine d, die letzte nicht Bedingung Sache.

Ihr bestimmter Pfad gibt eine (Reihe von) div, die letzte Sache in Ihrem XPath Pfad ist. Dieser Rückgabewert enthält somit die obersten Knoten, div in Ihrem Fall, und darunter (sie) alle ihre (ihre) Kinder. Knoten können Elemente oder Text (oder Kommentare, Verarbeitungsanweisungen, ...) sein.

Unter einem Knoten können mehrere Textknoten liegen, daher spricht das Array pOcHa. x/text() gibt den gesamten Text zurück, der ein direktes Kind von x ist, x/node() gibt alle untergeordneten Knoten zurück, einschließlich Text.

Hoffe, das hilft.

37
node() = innerXml 

text() = innerText 

beide sind Arrays, also Text () [1] ist ein erster untergeordneter Textknoten ...

+0

Wie würden mehrere Textknoten aussehen wie in XML? Würde text() eine Verkettung aller inneren Texte zurückgeben, die ein Kind des ausgewählten Knotens? – CoDEmanX

+1

@CoDEmanX: '

text1text2text3
' wie gesagt, es ist ein ** Array **, also 'div/node() [0] == div/text() [0] == text1' Knoten und' div/node() [1] == span 'node und' div/node() [2] == div/text() [1] == text3' node - Sie müssten diese selbst verketten (von Hand oder mit eine Hilfsfunktion, die ein Array akzeptiert). –

0

Sie können versuchen,

// div [@ class = 'myclass']/child :: *

child :: * wählt alle Kindelemente des Kontextknotens see details

2

Neue Antwort auf eine alte, häufig gestellte Frage:

Aus diesem XML

<div class="myclass">content</div> 

Sie XPath können nur content in einer von zwei Möglichkeiten zur Auswahl:

  1. Text Node Selection

    Dieser XPath,

    //div[@class='myclass']/text() 
    

    wird die Textknoten Kinder des Zielelements div, content, wie angefordert.

  2. String Wert eines Elements

    Dieser XPath,

    string(//div[@class='myclass']) 
    

    string-value des anvisierten div Element zurück, content, wieder wie gewünscht.

    Weitere Informationen: Hier ist ein note Erläuterung der strang Werte von Elementen:

    Die string-value eines Elementknotens sind die Verkettung des string-value S alle Textknoten descendants des Elements Knoten in Dokumentenreihenfolge.

Verwandte Themen