private boolean matches(Parent parent, String name, boolean attribute) { if (attribute != isAttribute || parts.isEmpty()) { return false; } else { if (Objects.equals(name, parts.get(parts.size() - 1))) { Parent p = parent; for (int index = parts.size() - 2; index > 0; index--) { if (p instanceof Element) { final Element e = (Element) p; if (e.getName().equals(parts.get(index))) { p = e.getParent(); } else { return false; } } else { return false; } } return true; } else { return false; } } }
@Override public final Document getDocument() { final Element root = getRootElement(); if (root != null) { return (Document) root.getParent(); } else { return (Document) getParent(); } }
public boolean matchesElement(Parent parent) { if (parent instanceof Element) { final Element element = (Element) parent; return matchesElement(element.getParent(), element.getName()); } else { return false; } }
@Override public String getQName() { if (isRoot()) { return "/" + getName(); } else { return getParent().getQName() + "/" + getName(); } }
@Override public void endElement(String uri, String localName, String qName) throws SAXException { LOGGER.trace("endElement()"); if (top() == Action.KEEP) { final Element current = (Element) currentParent; checkActiveText(true); currentParent = ((Child) currentParent).getParent(); resetActiveText(); if (!acceptsElementPost(current.getParent(), current)) { current.detach(); } } popAction(); }
@Test public void testConstructors() { final Element e = new Element(NAME); assertEquals(null, e.getParent()); assertEquals(ElementContentType.EMPTY, e.getContentType()); e.addComment("comment", true); assertEquals(ElementContentType.NON_TEXT, e.getContentType()); }
public static void setContentOfMatchingElements(Parent parent, ElementPredicate predicate, TextContentConverter converter, Evaluator<? super Parent> evaluator) { if (parent instanceof Element) { final Element element = (Element) parent; if (predicate.accepts(element.getParent(), element)) { final int count = element.getChildrenCount(); if (count == 0) { // Add a text child final String content = converter.convertTextContent(element, null); if (content != null) { element.addText(content); } } else if (count == 1 && element.hasOnlyText()) { // Modify text child if possible final Text text = element.getChild(Text.class); final String content = converter.convertTextContent(element, text.getContent()); text.setContent(content); } } } for (final Child child : parent.getChildren()) { if (child instanceof Parent && evaluator.evaluate((Parent) child) == Evaluation.CONTINUE) { setContentOfMatchingElements((Parent) child, predicate, converter, evaluator); } } }
@Test public void testRoot() { final Document doc = new Document(); assertEquals(null, doc.getRootElement()); final Element root = new Element("root"); assertEquals(null, root.getParent()); assertTrue(doc.canAddChild(root)); doc.addChild(root); assertFalse(doc.canAddChild(root)); assertEquals(root, doc.getRootElement()); root.setParent(null); assertEquals(null, root.getParent()); assertEquals(null, doc.getRootElement()); } }