/** * Insert content, specified by the parameter, to the beginning of each * element in the set of matched elements. */ public Jerry prepend(String html) { if (html == null) { html = StringPool.EMPTY; } final Document doc = builder.parse(html); if (nodes.length == 0) { return this; } for (Node node : nodes) { Document workingDoc = doc.clone(); node.insertChild(workingDoc.getChildNodes(), 0); } return this; }
/** * Replace each element in the set of matched elements with the provided * new content and return the set of elements that was removed. */ public Jerry replaceWith(String html) { if (html == null) { html = StringPool.EMPTY; } final Document doc = builder.parse(html); if (nodes.length == 0) { return this; } for (Node node : nodes) { Node parent = node.getParentNode(); // if a node already is the root element, don't unwrap if (parent == null) { continue; } // replace, if possible Document workingDoc = doc.clone(); int index = node.getSiblingIndex(); parent.insertChild(workingDoc.getFirstChild(), index); node.detachFromParent(); } return this; }
@Test void testCssPath() { Document document = new Document(); Element html = new Element(document, "html"); document.addChild(html); Element div1 = new Element(document, "div"); div1.setAttribute("id", "one"); html.addChild(div1); Element div2 = new Element(document, "div"); div1.addChild(div2); assertEquals("html div#one div", div2.getCssPath()); assertEquals("html div#one", div1.getCssPath()); assertTrue(document.check()); }
@Test void testPeopleXml() throws IOException { File file = new File(testDataRoot, "people.xml"); String xmlContent = FileUtil.readString(file); LagartoDOMBuilder lagartoDOMBuilder = new LagartoDOMBuilder(); lagartoDOMBuilder.enableXmlMode(); Document doc = lagartoDOMBuilder.parse(xmlContent); assertEquals(2, doc.getChildNodesCount()); // not 3! XmlDeclaration xml = (XmlDeclaration) doc.getFirstChild(); assertEquals(0, xml.getAttributesCount()); Element peopleList = (Element) doc.getChild(1); assertEquals(1, peopleList.getChildNodesCount()); Element person = peopleList.getFirstChildElement(); assertEquals(3, person.getChildNodesCount()); Element name = (Element) person.getChild(0); assertEquals("Fred Bloggs", name.getTextContent()); assertEquals("Male", person.getChild(2).getTextContent()); xmlContent = StringUtil.removeChars(xmlContent, "\n\r\t"); assertEquals(xmlContent, doc.getHtml()); assertTrue(doc.check()); }
/** * Starts with DOM building. * Creates root {@link jodd.lagarto.dom.Document} node. */ @Override public void start() { log.debug("DomTree builder started"); if (rootNode == null) { rootNode = new Document(domBuilder.config); } parentNode = rootNode; enabled = true; if (domBuilder.config.isEnabledVoidTags()) { htmlVoidRules = new HtmlVoidRules(); } }
@Test void testXmlDec() { LagartoDOMBuilder lagartoDOMBuilder = new LagartoDOMBuilder(); lagartoDOMBuilder.enableXmlMode(); Document document = lagartoDOMBuilder.parse("<?xml version=\"1.0\"?><div?></div>"); XmlDeclaration xml = (XmlDeclaration) document.getFirstChild(); assertEquals(0, xml.getAttributesCount()); assertEquals("xml", xml.getNodeName()); Element div = (Element) xml.getNextSibling(); assertEquals(0, div.getAttributesCount()); assertEquals("div?", div.getNodeName()); assertTrue(document.check()); }
@Test void testClone() { String page = "<html><body><p id=\"w173\">Hello<br>Jodd</p></body></html>"; Document root = new LagartoDOMBuilder().parse(page); String generated = root.getHtml(); assertEquals(page, generated); Document rootClone = root.clone(); String generated2 = rootClone.getHtml(); assertEquals(page, generated2); assertNotSame(root, rootClone); assertNotSame(root.getChild(0), rootClone.getChild(0)); assertTrue(root.check()); }
rootNode.end(); log.debug("LagartoDom tree created in " + rootNode.getElapsedTime() + " ms");
/** * Generates inner HTML. */ public String getInnerHtml() { LagartoDomBuilderConfig lagartoDomBuilderConfig; if (ownerDocument == null) { lagartoDomBuilderConfig = ((Document) this).getConfig(); } else { lagartoDomBuilderConfig = ownerDocument.getConfig(); } LagartoHtmlRenderer lagartoHtmlRenderer = lagartoDomBuilderConfig.getLagartoHtmlRenderer(); return lagartoHtmlRenderer.toInnerHtml(this, new StringBuilder()); }
@Test void testReindexOne() { Document document = new Document(); Element one = new Element(document, "one"); document.addChild(one); assertEquals(1, document.childElementNodesCount); assertEquals(0, one.siblingElementIndex); Element two = new Element(document, "two"); document.addChild(two); assertEquals(2, document.childElementNodesCount); assertEquals(0, one.siblingElementIndex); assertEquals(1, two.siblingElementIndex); Text three = new Text(document, "xxx"); document.addChild(three); Element four = new Element(document, "four"); document.addChild(four); assertEquals(3, document.childElementNodesCount); assertEquals(0, one.siblingElementIndex); assertEquals(1, two.siblingElementIndex); assertEquals(2, four.siblingElementIndex); }
@Test void testEncode() { LagartoDOMBuilder lagartoDOMBuilder = new LagartoDOMBuilder(); Document document = lagartoDOMBuilder.parse("<div foo=\"q w\">a<b</div>"); Element div = (Element) document.getFirstChild(); String foo = div.getAttribute("foo"); assertEquals("q\u00A0w", foo); div.setAttribute("foo", "q\u00A0w\u00A0e"); assertEquals("<div foo=\"q w e\">a<b</div>", document.getHtml()); Text text = (Text) document.getFirstChild().getFirstChild(); assertEquals("a<b", text.getNodeValue()); assertEquals("a<b", text.getTextContent()); assertEquals("a<b", text.getTextValue()); assertTrue(document.check()); }
@Test void testDoubleDecode() { LagartoDOMBuilder lagartoDOMBuilder = new LagartoDOMBuilder(); Document document = lagartoDOMBuilder.parse("<div title=\"&lt;root /&gt;\">"); Element div = (Element) document.getFirstChild(); assertEquals("<root />", div.getAttribute("title")); } }
/** * Inserts content, specified by the parameter, before each * element in the set of matched elements. */ public Jerry before(String html) { final Document doc = builder.parse(html); for (Node node : nodes) { Document workingDoc = doc.clone(); node.insertBefore(workingDoc, node); } return this; }
document.getConfig().setLagartoHtmlRenderer( new LagartoHtmlRenderer() { @Override assertEquals("<html><boDY><div id=\"z\" foobar=\"aAa\">some Text</div></boDY></html>", document.getHtml()); document.getConfig().setLagartoHtmlRenderer( new LagartoHtmlRenderer() { @Override assertEquals(html, document.getHtml()); document.getConfig().setLagartoHtmlRenderer( new LagartoHtmlRenderer() { @Override assertEquals("<html><body><div id=\"z\" fooBar=\"aAa\">some Text</div></body></html>", document.getHtml()); document.getConfig().setLagartoHtmlRenderer( new LagartoHtmlRenderer() { @Override assertEquals("<html><body><div id=\"z\" foobar=\"aAa\">some Text</div></body></html>", document.getHtml()); document.getConfig().setLagartoHtmlRenderer( new LagartoHtmlRenderer() { @Override assertEquals("<html><body><div ID=\"z\" FOOBAR=\"aAa\">some Text</div></body></html>", document.getHtml());
@Override public void error(final String message) { rootNode.addError(message); log.log(domBuilder.config.getParsingErrorLogLevel(), message); }
@Override public void document(final Document document) { document.visitChildren(this); }
@Test void testDetach() { Document document = new Document(); Element html = new Element(document, "html"); document.addChild(html); Element div1 = new Element(document, "div"); html.addChild(div1); Element div2 = new Element(document, "div"); div1.addChild(div2); div1.detachFromParent(); assertEquals(0, html.getChildNodesCount()); assertNull(div1.getParentNode()); assertTrue(document.check()); }
assertEquals(1, root.getChildNodesCount()); Element html = (Element) root.getFirstChild(); assertEquals(Node.NodeType.ELEMENT, html.getNodeType()); assertNotNull(html); assertEquals("Jodd", t.getNodeValue()); String generated = root.getHtml(); assertTrue(root.check());
@Test void testAttributes() { Document document = new Document(); Element node = new Element(document, "div"); assertFalse(node.hasAttributes()); assertFalse(node.hasAttribute("id")); assertNull(node.getAttribute("id")); node.setAttribute("id", "jodd"); assertTrue(node.hasAttributes()); assertTrue(node.hasAttribute("id")); assertEquals("jodd", node.getAttribute("id")); node.setAttribute("foo"); assertTrue(node.hasAttribute("foo")); assertNull(node.getAttribute("foo")); assertFalse(node.isAttributeContaining("class", "one")); node.setAttribute("class", " one two three "); assertTrue(node.isAttributeContaining("class", "two")); assertTrue(node.isAttributeContaining("class", "three")); assertEquals(3, node.getAttributesCount()); }