XPath Как получить значение ячейки таблицы из HTML-документа - PullRequest
3 голосов
/ 09 мая 2011

У меня есть HTML-документ, и где-то внутри документа ниже таблицы, я могу получить строки таблицы и объекты DOM Java. Что мне не понятно, так это как извлечь значение ячейки таблицы, когда значение является строкой, а также когда это двоичный ресурс?

Я использую код как:

  XPath xpath;
   XPathExpression expr;
   NodeList nodes=null;
   // Use XPath to obtain whatever you want from the (X)HTML
   try{

      xpath = XPathFactory.newInstance().newXPath();
      //<table class="data">

      NodeList list = doc.getElementsByTagName("table");
     // Node node = list.item(0); 
     //System.out.println(node.getTextContent());
    //String textContent=node.getTextContent();

    expr = xpath.compile("//table/tr/td");
    nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);

и loopiong, как:

     for (int i = 0; i < nodes.getLength(); i++) {

       Node ln = list.item(i);
       String lnText=ln.toString();
       NodeList rowElements=ln.getChildNodes();
       Node one=rowElements.item(0);

       String oneText=one.toString();
       String nodeName=one.getNodeName();
       String valOne = one.getNodeValue();

Но я не вижу значений в таблице.

 <table class="data">
 <tr><td>ImageName1</td><td width="50"></td><td><img src="/images/036000291452" alt="036000291452" /></td></tr>
 <tr><td>ImageName2</td><td width="50"></td><td><img src="/images/36000291452" alt="36000291452" /></td></tr>
 <tr><td>Description</td><td></td><td>Time Magazine</td></tr>
 <tr><td>Size/Weight</td><td></td><td>14 Issues</td></tr>
 <tr><td>Issuing Country</td><td></td><td>United States</td></tr>
  </table>

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Это выражение XPath :

/*/tr[1]/td[1]

выбирает элемент td (без пространства имен), который является первым дочерним элементом первого tr дочернего элемента верхнего элемента (table) предоставленного XML-документа.

Выражение XPath :

/*/tr[1]/td[2]

выбирает элемент td (без пространства имен), который является вторымдочерний элемент первого tr дочернего элемента верхнего элемента (table) предоставленного XML-документа.

В общем :

/*/tr[$m]/td[$n]

выбирает td элемент (без пространства имен), являющийся $n -ым дочерним элементом $m -го tr дочернего элемента верхнего элемента (table) предоставленного XML-документа.Просто замените $m и $n нужными целочисленными значениями.

Вы можете использовать стандартную функцию XPath string(), чтобы получить их строковое значение:

string(/*/tr[$m]/td[$n])

соответствует строковому значению элемента td (без пространства имен), который является $n -ым дочерним элементом $m -го tr дочернего элемента верхнего элемента (table) предоставленного XML-документа.

0 голосов
/ 09 мая 2011

Используйте путь типа "string (// td)", чтобы получить строковое содержимое каждой ячейки. Для связанных ресурсов вам нужно будет использовать что-то вроде «// td / img / @ src», чтобы получить URL-адреса, затем канонизировать их относительно исходного URL-адреса и извлечь полученный URL-адрес из сети.

...