Как удалить элементы страницы в htmlunit - PullRequest
2 голосов
/ 24 сентября 2010

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

Ответы [ 2 ]

1 голос
/ 26 сентября 2010

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

            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, но вы поняли.

0 голосов
/ 25 сентября 2010

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

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

...