3 Stimmen

Wie kann man den Namen des Autors und den Titel des Buches mit Hilfe von XPath aus einem HTML-Scan auslesen?

Der HTML-Text, den Sie unten sehen, ist ein Text, den ich von einer entfernten Website in eine lokale Variable gekratzt habe, so wie er ist.

Jetzt muss ich die authorName y bookTitle aus den HTML-Tags in ihre eigenen Variablen umzuwandeln, wobei das folgende konsistente Format des gescrapten Textes zu beachten ist:

<p>
  William Faulkner - 'Light In August'
  <br/>
  William Faulkner - 'Sanctuary'
  <br/>
  William Faulkner - 'The Sound and the Fury'
</p>

Ist es möglich, dies in XPath zu tun?

2voto

Tomalak Punkte 320467

Ja. Und auch einfach:

//p/text()

Sie erhalten drei separate Textknoten:

"
  William Faulkner - 'Light In August'
  ",
"
  William Faulkner - 'Sanctuary'
  ",
"
  William Faulkner - 'The Sound and the Fury'
"

Denken Sie daran, dass vor- und nachgelagerter Leerraum (einschließlich eventueller Zeilenumbrüche) immer Teil des Textknotens ist. Trimmen Sie das Ergebnis.

Ich gehe davon aus, dass Sie keine Hilfe bei der Aufteilung der resultierenden Zeichenketten in Autor und Titel benötigen.

2voto

In XPath 1.0 können Sie die Textknoten-Unterknoten von p :

/p/text()

Sie können auch die Zeichenfolge vor (Autor) und nach (Titel) abrufen - Zeichen für jeden Textknoten

substring-before(/p/text()[1],'-')

Ergebnis:

  William Faulkner 

substring-after(/p/text()[1],'-')

Ergebnis:

 'Light In August'       

In XPath 2.0:

/p/text()/substring-before(.,'-')

Das Ergebnis ist eine Folge von 3 Punkten:

William Faulkner William Faulkner William Faulkner 

Und

/p/text()/substring-after(.,'-')

Ergebnis auch in einer Folge von 3 Positionen:

'Light In August' 'Sanctuary' 'The Sound and the Fury'

1voto

Dimitre Novatchev Punkte 234995

Sie können den $N-ten Autorennamen mit diesem XPath-Ausdruck ermitteln :

substring-before(normalize-space(p/text()[$N]), ' -')

Sie können den $N-ten Titel mit diesem XPath-Ausdruck ermitteln :

substring-after(normalize-space(p/text()[$N]), ' - ')

Sie können zunächst die Anzahl aller Textknoten mit ermitteln:

count(p/text())

dann können Sie die ersten beiden XPath-Ausdrücke eingeben, indem Sie $N mit den Zahlen im Intervall

[1,count(p/text())]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X