2017-06-02 1 views
0
<table border="1"> 
    <tbody> 
     <tr> 
      <th>ID</th> 
      <th>Product</th> 
      <th>Color</th> 
      <th>Model</th> 
     </tr> 
     <tr> 
      <td>22</td> 
      <td>Car</td> 
      <td>blue</td> 
      <td> 
       <ul> 
       </ul> 
      </td> 
     </tr> 
    </tbody> 
</table> 

Oben ist ein Ausschnitt eines hoch verschachtelten HTML-Dokuments. Um die Tabelle Ebene zu erhalten habe ich die folgende XPath verwendetVerwenden von xpath - Auswählen von Spaltendaten für den Tabellenheader

//th[contains(text(), "ref_code")]/following- 
sibling::td[contains(text(), "197")]/ancestor::table[2] 

Wie kann ich die gleiche XPath bearbeiten und wählen Sie ein bestimmtes Tabelle Kopfdaten und die entsprechenden Datenspalt Tabelle wie so mit XPath:

ID | Artikel | Farbe

22 | Auto | Blau

Jede Hilfe wird

Antwort

0

Wir für Tabellendaten seach geschätzt werden //table//td von Position in Header der Spalte //table//th[text()='Color']

Die [count(element/preceding-sibling::*) +1] ist wie Element-Index

So Ergebnis zu finden ist:

//table//td[count(//table//th[text()='Color']/preceding-sibling::*) +1] 
+0

Danke, aber es funktioniert nicht, aber wenn ich ---- '// th [enthält (text(), "tracking_code")]/folgende-Geschwister :: td [enthält (text(), "197 ")]/ancestor :: table [2] // td [Anzahl (// Tabelle // th [Text() = 'Farbe']/Vorgänger-Geschwister :: *) <5] '---- es wählt alles aus, was nicht ideal ist, da ich bestimmte Header-Spalten, z. B. Modelle, ausschließen möchte. – Darth

0

Von Ihren Kommentaren zu den hier gegebenen Antworten: Ich gehe davon aus, dass Sie das bekommen über die Tabelle von einem bestehenden xpath, der ist:

//th[contains(text(), "ref_code")]/following- 
sibling::td[contains(text(), "197")]/ancestor::table[2] 

Nun möchten Sie hinzufügen/bearbeiten zu diesem Xpath wie dass Sie die Werte td eine Spalte für z. Color, dann sollten die folgenden XPath geben Sie die td Werte für alle Spalten Color als Eingabe gegeben:

//td[position()<=(count(//tr/th[.='Color']/preceding-sibling::*)+1) ] 

Ihre erste XPath korrekt funktioniert Unter der Annahme, fügen Sie den oben XPath zu diesem wie:

//th[contains(text(), "ref_code")]/following- 
sibling::td[contains(text(), "197")]/ancestor::table[2]//td[position()<=(count(//tr/th[.='Color']/preceding-sibling::*)+1) ] 

Ausgang :

<td>22</td> 
<td>Car</td> 
<td>blue</td> 

Wenn Sie nur die Color, die Verwendung von XPath:

//td[(count(//tr/th[.='Color']/preceding-sibling::*)+1) ]

Wenn Sie nur die XPath Product verwenden möchten:

//td[(count(//tr/th[.='Product']/preceding-sibling::*)+1) ]

Wenn Sie nur die ID Verwendung XPath wollen:

//td[(count(//tr/th[.='ID']/preceding-sibling::*)+1) ]

Beachten Sie, dass die XPath-Änderungen unter th[.='XXX'] wo XXX ist das ausgewählte Element.

Aber, wenn Sie die Ausgabe sein, in der Form einer Tabelle wollen, müssen Sie XSLT verwenden, da Sie einen transformierten Blick auf Ihre HTML zu bekommen versuchen, nicht nur ausgewählte Elemente.

+0

Danke, aber meine Frage bezog sich darauf, wie man die Daten eher als Ausgabeformat auswählt. Was man sucht, ist, wie man eine Spaltenüberschrift wählt, z.B. Farbe und alle oder einige der Daten für diese Spalte. – Darth

+0

@DarthCake So gegeben Eingang 'Color', möchten Sie' ID, Produkt, Farbe' und ihre Werte. ? Bitte geben Sie richtig an, was die gewünschte I/O ist? – SomeDude

+0

Bei gegebener Eingabe 'Farbe' sollte die gewünschte Ausgabe 'blau' sein. Also im Grunde die entsprechende , beachten Sie, diese Tabelle befindet sich in einem hoch verschachtelten HTML-Dokument. – Darth

Verwandte Themen