Xisemele é uma biblioteca simples escrita em Java para manipulação de XML com uma interface fluente para leitura, escrita e edição de documentos da API W3C DOM.
Por exemplo, o código:
import net.sf.xisemele.api.Writer; import net.sf.xisemele.impl.XisemeleFactory;
Writer writer = XisemeleFactory.newXisemele() .createWriter("raiz").within() .element("elemento1", 15) .element("elemento2").attribute("attr", "valor").within() .element("filho1", "valor filho1") .element("filho2", "valor filho2") .endWithin() .endWithin(); String xml = writer.result().ident(true).toXML(); System.out.println( xml );
Imprime no console o seguinte XML:
<?xml version="1.0" encoding="UTF-8"?> <raiz> <elemento1>15</elemento1> <elemento2 attr="valor"> <filho1>valor filho1</filho1> <filho2>valor filho2</filho2> </elemento2> </raiz>
A implementação de Xisemele abstrai a API DOM em uma interface simplificada. Nem todas as operações da API DOM são suportadas. Porém, para o propósito que essa biblioteca foi implementada, as operações não suportadas raramente serão necessárias ou então, em último caso, serão implementadas em versões futuras.
Para entender este propósito, veja o exemplo de como o mesmo XML mostrado acima seria escrito usando a API DOM:
import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Attr; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element;
try { DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.newDocument(); doc.setXmlStandalone(true); Element raiz = doc.createElement("raiz"); doc.appendChild(raiz); Element elemento1 = doc.createElement("elemento1"); raiz.appendChild(elemento1); elemento1.appendChild( doc.createTextNode("15") ); Element elemento2 = doc.createElement("elemento2"); Attr atributo = doc.createAttribute("attr"); atributo.setNodeValue("valor"); elemento2.setAttributeNode(atributo); raiz.appendChild(elemento2); Element filho1 = doc.createElement("filho1"); filho1.appendChild( doc.createTextNode("valor filho1") ); elemento2.appendChild(filho1); Element filho2 = doc.createElement("filho2"); filho2.appendChild( doc.createTextNode("valor filho2") ); elemento2.appendChild(filho2); StringWriter writer = new StringWriter(); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); transformer.transform(new DOMSource(doc), new StreamResult(writer)); System.out.println( writer.toString() ); } catch (DOMException e) { e.printStackTrace(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (TransformerFactoryConfigurationError e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); }
Segue abaixo a lista de funcionalidades não suportadas pela API Xisemele. Tais funcionalidades poderão ser implementadas em versões futuras.
Para entender como usuar a biblioteca Xisemele veja a seção Tutorial. Recomenda-se baixar os fontes do projeto para ver todos os exemplos nos testes unitários conforme for estudando a API.
Você pode obter o Xisemele das seguintes formas:
svn checkout https://xisemele.svn.sourceforge.net/svnroot/xisemele/xisemele xisemele
<groupId>net.sf.xisemele</groupId> <artifactId>xisemele</artifactId> <version>1.3</version>