2010-09-24 2 views
2

Обычно в PHP я просто разбирал старый документ и записывал в новый документ, игнорируя нежелательные элементы.Как удалить элементы страницы в htmlunit

+0

ok .. и ......? – bragboy

+0

Я не могу понять, как это сделать, используя классы htmlunit. Ну, я могу, но это, вероятно, займет несколько дней. Поэтому все, что вы можете дать мне за советом, будет очень признателен. –

ответ

0

Посмотрите на методы DOM, вы можете удалить узлы.

http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/html/DomNode.html

+0

Спасибо, Ахмед, я ценю ваш комментарий. У меня уже было решение (см. Ниже), но ваш комментарий заставил меня подумать, что, может быть, я смогу найти более простое решение из документов HtmlUnit API. –

+0

К сожалению, мой ответ был выше. Извините, новичок здесь. –

1

Это было первое решение, которое я придумал:

  DocumentBuilder builder = DocumentBuilderFactory 
             .newInstance() 
             .newDocumentBuilder(); 

      StringReader reader = new StringReader(xml); 
      Document document = builder.parse(new InputSource(reader)); 

      XPathExpression expr = XPathFactory 
            .newInstance() 
            .newXPath() 
            .compile(...); 

      Object result = expr.evaluate(document, XPathConstants.NODESET); 

      Element el = document.getDocumentElement(); 
      NodeList nodes = (NodeList) result; 
      for (int i = 0; i < nodes.getLength(); i++) { 
       el.removeChild(nodes.item(i)); 
      } 

Как вы можете видеть, что это своего рода долго. Будучи кодировщик, который стремится к простоте, я решил последовать совету Ахмеда надеясь, что я буду найти лучшее решение, и я пришел с этим:

  List<?> elements = page.getByXPath(...); 

      DomNode node = null; 
      for(Object o : elements) { 
       node = (DomNode)o; 
       node.getParentNode().removeChild(node); 
      } 

Пожалуйста, обратите внимание, это только фрагменты, я пропустил импорт и XPath но вы получите эту идею.

Смежные вопросы