/ / Java i xpath - problem z analizą xHtml - java, xml, xhtml, xpath

Java i xpath - problem z parsowaniem xHtml - java, xml, xhtml, xpath

Próbuję przeanalizować dobrze sformatowany dokument xhtml.
Mam problemy podczas iteracji węzłów.
Mój xHtml ma podobną strukturę

<?xml version="1.0" encoding="utf-8"?>
<html>
<head>...</head>
<body>
...
<form>
...
<div class="AB">    (1 or 2 times)
...
<div class="CD">
...
<table>
<tbody>
<tr>    (1 to N times)
<td> XXX </td>
<td> YYY </td> ...

Potrzebne informacje są zawarte w kolumnach (td).
Chcę zbudować N obiektów. Tak więc każdy wiersz (tr) zawiera w swoich kolumnach informacje potrzebne do zbudowania obiektu.
Mam 1 lub 2 div klasy = "AB". Więc w zasadzie będę miał 1 lub 2 obiekty AB zawierające listę innych obiektów utworzonych z każdego wiersza w tabeli

Więc na początku wyodrębniam NodeList tych div div AB

NodeList ABlist= (NodeList) xpath.evaluate("//div[@class="AB"]", document, XPathConstants.NODESET)

Teraz próbuję uzyskać NodeList wszystkich tremów pierwszego div AB.

NodeList trList = (NodeList) xpath.evaluate("/div/table//tr", ABlist.item(0), XPathConstants.NODESET);

W tym przypadku trList jest pusty. Czy wiesz, co jest nie tak z moim kodem?
Dziękuję Ci

Odpowiedzi:

2 dla odpowiedzi № 1

Problem w drugim nieudanym XPath polega na tym, że zaczynasz go od /:

/div/table//tr

W XPath, podobnie jak w ścieżkach plików, zaczynaj ścieżkę od / oznacza „zacznij od katalogu głównego dokumentu”. Ale tak naprawdę nie chcesz tego robić - chcesz zacząć od swojego węzła. Więc:

div/table//tr

zrobię, co chcesz.


0 dla odpowiedzi nr 2

Czy jesteś pewien, że to XHTML? W przykładowym dokumencie nie ma zadeklarowanej przestrzeni nazw, a bez tej przestrzeni nazw nie jest to XHTML. Jeśli istnieje przestrzeń nazw, a pominięto ją w próbce ze względu na zwięzłość, wówczas wyrażenia XPath muszą również odwoływać się do przestrzeni nazw, w przeciwnym razie nic nie wybiorą.