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 № 1Problem 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ą.