/** * Performs the fix for elements. */ protected void fixElements() { for (Element fosterElement : fosterElements) { // find parent table Element lastTable = findLastTable(fosterElement); Node fosterElementParent = fosterElement.getParentNode(); // filter our foster element Node[] fosterChilds = fosterElement.getChildNodes(); for (Node fosterChild : fosterChilds) { if (fosterChild.getNodeType() == Node.NodeType.ELEMENT) { if (isOneOfTableElements((Element) fosterChild)) { // move all child table elements outside // the foster element fosterChild.detachFromParent(); fosterElementParent.insertBefore(fosterChild, fosterElement); } } } // finally, move foster element above the table fosterElement.detachFromParent(); lastTable.getParentNode().insertBefore(fosterElement, lastTable); } }
protected void fixText() { for (Text fosterText : fosterTexts) { // find parent table Element lastTable = findLastTable(fosterText); // move foster element above the table fosterText.detachFromParent(); Node tablesPreviousNode = lastTable.getPreviousSibling(); if (tablesPreviousNode.getNodeType() == Node.NodeType.TEXT) { // append to previous text node Text textNode = (Text) tablesPreviousNode; String text = textNode.getNodeValue(); textNode.setNodeValue(text + fosterText.getNodeValue()); } else { // insert text node before the table lastTable.getParentNode().insertBefore(fosterText, lastTable); } } }
@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()); }
/** * Performs the fix for elements. */ protected void fixElements() { for (Element fosterElement : fosterElements) { // find parent table Element lastTable = findLastTable(fosterElement); Node fosterElementParent = fosterElement.getParentNode(); // filter our foster element Node[] fosterChilds = fosterElement.getChildNodes(); for (Node fosterChild : fosterChilds) { if (fosterChild.getNodeType() == Node.NodeType.ELEMENT) { if (isOneOfTableElements((Element) fosterChild)) { // move all child table elements outside // the foster element fosterChild.detachFromParent(); fosterElementParent.insertBefore(fosterChild, fosterElement); } } } // finally, move foster element above the table fosterElement.detachFromParent(); lastTable.getParentNode().insertBefore(fosterElement, lastTable); } }
/** * Performs the fix for elements. */ protected void fixElements() { for (Element fosterElement : fosterElements) { // find parent table Element lastTable = findLastTable(fosterElement); Node fosterElementParent = fosterElement.getParentNode(); // filter our foster element Node[] fosterChilds = fosterElement.getChildNodes(); for (Node fosterChild : fosterChilds) { if (fosterChild.getNodeType() == Node.NodeType.ELEMENT) { if (isOneOfTableElements((Element) fosterChild)) { // move all child table elements outside // the foster element fosterChild.detachFromParent(); fosterElementParent.insertBefore(fosterChild, fosterElement); } } } // finally, move foster element above the table fosterElement.detachFromParent(); lastTable.getParentNode().insertBefore(fosterElement, lastTable); } }
protected void fixText() { for (Text fosterText : fosterTexts) { // find parent table Element lastTable = findLastTable(fosterText); // move foster element above the table fosterText.detachFromParent(); Node tablesPreviousNode = lastTable.getPreviousSibling(); if (tablesPreviousNode.getNodeType() == Node.NodeType.TEXT) { // append to previous text node Text textNode = (Text) tablesPreviousNode; String text = textNode.getNodeValue(); textNode.setNodeValue(text + fosterText.getNodeValue()); } else { // insert text node before the table lastTable.getParentNode().insertBefore(fosterText, lastTable); } } }
protected void fixText() { for (Text fosterText : fosterTexts) { // find parent table Element lastTable = findLastTable(fosterText); // move foster element above the table fosterText.detachFromParent(); Node tablesPreviousNode = lastTable.getPreviousSibling(); if (tablesPreviousNode.getNodeType() == Node.NodeType.TEXT) { // append to previous text node Text textNode = (Text) tablesPreviousNode; String text = textNode.getNodeValue(); textNode.setNodeValue(text + fosterText.getNodeValue()); } else { // insert text node before the table lastTable.getParentNode().insertBefore(fosterText, lastTable); } } }