In this tutorial we make extensive use of XPath to mimicry an existing 3rd Party-API.
In this example we do something special:
The result is a generic Java API you can use to analyze every XML document.
public interface Document { @XBRead ( "/*" ) Element getRootElement(); @XBWrite ( "/*" ) void setRootElement(Element rootElement); } |
public interface Element { @XBRead ( "." ) Element addAttribute(Attribute attribute); @XBWrite ( "@{1}" ) Element addAttribute(String name, @XBValue String value); @XBRead ( "@{0}" ) Attribute attribute(String name); @XBRead ( "count(@*)" ) int attributeCount(); @XBRead ( "@*" ) List<Attribute> attributes(); @XBRead ( "@{0}" ) String attributeValue(String attributeName); @XBRead ( "./{0}" ) Element element(String name); @XBRead ( "./*" ) List<Element> elements(); @XBRead ( "name()" ) String getName(); @XBRead ( "." ) String getText(); } |
public interface Attribute { @XBRead ( "name()" ) String getName(); @XBRead ( "." ) String getValue(); } |
XBProjector projector = new XBProjector(); Document document =projector.io().fromURLAnnotation(Document. class ); Element element = document.getRootElement(); System.out.println(element.getName()); Element element2 = element.element( "eelement" ); System.out.println(element2.getText()); Attribute attribute = element2.attribute( "eattribute" ); System.out.println(attribute.getValue()); org.w3c.dom.Element newRootNode = ((DOMAccess)document).getDOMOwnerDocument().createElement( "newRoot" ); Element newRootElement = projector.projectDOMNode(newRootNode, Element. class ); document.setRootElement(newRootElement); System.out.println(document); |