Найти Xpath элемента в содержимом HTML-страницы, используя Java

Я начинаю с выражения XPath,

У меня ниже URL:

http://www.newark.com/white-rodgers/586-902/contactor-spst-no-12vdc-200a-bracket/dp/35M1913?MER=PPSO_N_P_EverywhereElse_None

который содержит html pagecontent, используя следующие xpaths, он приводит к тому же элементу ul в javascript:

  1. //*[@id="moreStock_5257711"]
  2. //*[@id="priceWrap"]/div[1]/div/a/following-sibling::ul
  3. //html/body/div/div/div/div/div/div/div/div/div/div/a/following-sibling::ul

используя этот xpaths, как я должен получить тот же элемент ul в Java

Я попытался с помощью "очистителя HTML" это не удалось в Xpath -

"//*[@id="priceWrap"]/div[1]/div/a/following-sibling::ul",
"//html/body/div/div/div/div/div/div/div/div/div/div/a/following-sibling::ul"

это сработало для "//*[@id='moreStock_5257711']" этого xpath. Так что ниже код, который я пробовал в очистителе HTML

package com.test.htmlcleaner.HtmlCleaner;

import java.io.IOException;

import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;
import org.htmlcleaner.XPatherException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class Test {
 public static void main(String[] args) {

  try {
 HtmlCleaner htmCleaner = new HtmlCleaner();
   CleanerProperties cleanerProperties = htmCleaner.getProperties();
   cleanerProperties.setTranslateSpecialEntities(true);
   cleanerProperties.setTransResCharsToNCR(true);
   cleanerProperties.setOmitComments(true);

   String s = "http://www.newark.com/white-rodgers/586-902/contactor-spst-no-12vdc-200a-bracket/dp/35M1913?MER=PPSO_N_P_EverywhereElse_None"; 
     Document doc = Jsoup.connect(s).timeout(30000).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2").get();

    String pageContent=doc.toString();
    TagNode node = htmCleaner.clean(pageContent);
    Object[] statsNode = node.evaluateXPath("//*[@id='moreStock_5257711']");
    if(statsNode.length > 0) {    
             for(int i=0;i<statsNode.length;i++){
               TagNode resultNode = (TagNode)statsNode[i];
               System.out.println("hi");
                System.out.println("Element Text : " +resultNode.getText().toString().trim());                 
               }
          }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (XPatherException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

Я требовал, чтобы все xpaths sholud работали с одним пакетом в java

Может ли кто-нибудь предложить мне заставить работать все выражения xpaths получения элемента ul с использованием Java.

Спасибо за пожелания.

1 ответ

Попробуйте отладить фактическое дерево HTML DOM, создаваемое HtmlCleaner. Используйте следующий код:

String pageContent = doc.toString();
TagNode node = htmCleaner.clean(pageContent);

StringWriter buffer = new StringWriter();
node.serialize(new PrettyHtmlSerializer(cleanerProperties), buffer);

System.out.println(buffer.toSting());

Теперь попробуйте применить все XPath к выходным данным буфера и посмотрите, почему они не работают.

Другие вопросы по тегам