Quellcode durchsuchen

change: XMLWriter (refactoring)
new: XMLElement#writer()
remove: xml: namespaces (unsupported anyway)
fix: xml: W3CQuery#parse - exceptions

Ranides Atterwim vor 10 Jahren
Ursprung
Commit
bd997c5d74
22 geänderte Dateien mit 189 neuen und 245 gelöschten Zeilen
  1. 1 1
      assira/src/main/java/net/ranides/assira/xml/XMLContext.java
  2. 0 4
      assira/src/main/java/net/ranides/assira/xml/XMLDocument.java
  3. 49 3
      assira/src/main/java/net/ranides/assira/xml/XMLElement.java
  4. 0 2
      assira/src/main/java/net/ranides/assira/xml/XMLElements.java
  5. 2 0
      assira/src/main/java/net/ranides/assira/xml/XMLException.java
  6. 0 24
      assira/src/main/java/net/ranides/assira/xml/XMLNamespace.java
  7. 0 68
      assira/src/main/java/net/ranides/assira/xml/XMLQuery.java
  8. 9 72
      assira/src/main/java/net/ranides/assira/xml/XMLWriter.java
  9. 0 6
      assira/src/main/java/net/ranides/assira/xml/impl/CElements.java
  10. 2 2
      assira/src/main/java/net/ranides/assira/xml/impl/W3CQuery.java
  11. 0 16
      assira/src/main/java/net/ranides/assira/xml/impl/W3Document.java
  12. 5 6
      assira/src/main/java/net/ranides/assira/xml/impl/W3Element.java
  13. 2 2
      assira/src/main/java/net/ranides/assira/xml/impl/W3Selectors.java
  14. 94 0
      assira/src/main/java/net/ranides/assira/xml/impl/W3Writer.java
  15. 1 2
      assira/src/test/java/net/ranides/assira/xml/XMLQueryTest.java
  16. 8 9
      assira/src/test/java/net/ranides/assira/xml/XMLWriterTest.java
  17. 1 2
      assira/src/test/java/net/ranides/assira/xml/impl/CElementTest.java
  18. 6 12
      assira/src/test/java/net/ranides/assira/xml/impl/CElementsTest.java
  19. 2 3
      assira/src/test/java/net/ranides/assira/xml/impl/W3AttributesTest.java
  20. 2 3
      assira/src/test/java/net/ranides/assira/xml/impl/W3DocumentTest.java
  21. 4 5
      assira/src/test/java/net/ranides/assira/xml/impl/W3ElementTest.java
  22. 1 3
      assira/src/test/java/net/ranides/assira/xml/impl/W3SelectorsTest.java

+ 1 - 1
assira/src/main/java/net/ranides/assira/xml/XMLContext.java

@@ -15,7 +15,7 @@ public interface XMLContext {
     XMLElement node();
     
     default XMLElements nodes() {
-        return XMLQuery.$(node());
+        return XMLElement.$(node());
     }
     
     int index();

+ 0 - 4
assira/src/main/java/net/ranides/assira/xml/XMLDocument.java

@@ -18,8 +18,6 @@ public interface XMLDocument {
     
     XMLElement attr(String name);
     
-    XMLElement attr(String ns, String name);
-    
     XMLElement cdata(String value);
     
     XMLElement comment(String value);
@@ -30,8 +28,6 @@ public interface XMLDocument {
     
     XMLElement tag(String tag);
     
-    XMLElement tag(String ns, String tag);
-    
     XMLElement entity(String name);
     
     XMLElement processing(String target, String value);

+ 49 - 3
assira/src/main/java/net/ranides/assira/xml/XMLElement.java

@@ -6,10 +6,19 @@
  */
 package net.ranides.assira.xml;
 
+import java.io.File;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.URI;
 import java.util.function.Predicate;
 import javax.xml.transform.Result;
 import javax.xml.transform.Transformer;
+import net.ranides.assira.collection.query.CQueryBuilder;
 import net.ranides.assira.generic.Wrapper;
+import net.ranides.assira.xml.impl.CElements;
+import net.ranides.assira.xml.impl.W3CQuery;
+import net.ranides.assira.xml.impl.W3Element;
 import org.w3c.dom.Node;
 
 /**
@@ -18,9 +27,46 @@ import org.w3c.dom.Node;
  */
 @SuppressWarnings({
     "PMD.TooManyDifferentMethods",
-    "PMD.TooManyPublicMethods"
+    "PMD.TooManyPublicMethods",
+    "PMD.MethodNameRules"
 })
 public interface XMLElement extends Wrapper<String> {
+    
+    XMLElements $true = $($("<true/>"));
+    
+    XMLElements $false = new CElements(CQueryBuilder.empty());
+
+    static XMLElement $(Node doc) {
+        return W3Element.wrap(doc);
+    }
+    
+    static XMLElement $(String doc) {
+        return W3CQuery.$(new StringReader(doc));
+    }
+    
+    static XMLElement $(File doc) {
+        return W3CQuery.$(doc);
+    }
+    
+    static XMLElement $(URI doc) {
+        return W3CQuery.$(doc);
+    }
+    
+    static XMLElement $(Reader doc) {
+        return W3CQuery.$(doc);
+    }
+    
+    static XMLElement $(InputStream doc) {
+        return W3CQuery.$(doc);
+    }
+    
+    static XMLElements $(XMLElements... elements) {
+        return W3CQuery.$(elements);
+    }
+    
+    static XMLElements $(XMLElement... elements) {
+        return W3CQuery.$(elements);
+    }
 
     XMLDocument document();
     
@@ -42,8 +88,6 @@ public interface XMLElement extends Wrapper<String> {
     
     XMLElement attr(String name);
     
-    XMLNamespace ns();
-    
     
     
     XMLElements find(String selector);
@@ -125,5 +169,7 @@ public interface XMLElement extends Wrapper<String> {
     <R extends Result> R apply(Transformer transformer, R output) throws XMLException;
     
     <R extends Result> R apply(XMLElement transformer, R output) throws XMLException;
+    
+    XMLWriter writer();
 
 }

+ 0 - 2
assira/src/main/java/net/ranides/assira/xml/XMLElements.java

@@ -46,9 +46,7 @@ public interface XMLElements extends Iterable<XMLElement> {
     
     XMLElements attrs(String name);
     
-    CQuery<XMLNamespace> ns();
     
-
     
     int size();
     

+ 2 - 0
assira/src/main/java/net/ranides/assira/xml/XMLException.java

@@ -11,6 +11,8 @@ package net.ranides.assira.xml;
  * @author Ranides Atterwim <ranides@gmail.com>
  */
 public class XMLException extends RuntimeException {
+    
+    private static final long serialVersionUID = 1L;
 
     public XMLException(Throwable cause) {
         super(cause);

+ 0 - 24
assira/src/main/java/net/ranides/assira/xml/XMLNamespace.java

@@ -1,24 +0,0 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.xml;
-
-import java.util.Map;
-
-/**
- *
- * @author Ranides Atterwim <ranides@gmail.com>
- */
-public interface XMLNamespace {
-    
-    XMLNamespace disable();
-    
-    XMLNamespace enable();
-    
-    XMLNamespace add(String name, String uri);
-    
-    XMLNamespace add(Map<String,String> ns);
-}

+ 0 - 68
assira/src/main/java/net/ranides/assira/xml/XMLQuery.java

@@ -1,68 +0,0 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-
-package net.ranides.assira.xml;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.StringReader;
-import java.net.URI;
-import net.ranides.assira.collection.query.CQueryBuilder;
-import net.ranides.assira.xml.impl.CElements;
-import net.ranides.assira.xml.impl.W3CQuery;
-import net.ranides.assira.xml.impl.W3Element;
-import org.w3c.dom.Node;
-
-/**
- *
- * @author Ranides Atterwim <ranides@gmail.com>
- */
-@SuppressWarnings("PMD.MethodNameRules")
-public final class XMLQuery {
-    
-    public static final XMLElements $true = $($("<true/>"));
-    
-    public static final XMLElements $false = new CElements(CQueryBuilder.empty());
-    
-    private XMLQuery() {
-        /* utility class */
-    }
-
-    public static XMLElement $(Node doc) {
-        return W3Element.wrap(doc);
-    }
-    
-    public static XMLElement $(String doc) {
-        return W3CQuery.$(new StringReader(doc));
-    }
-    
-    public static XMLElement $(File doc) {
-        return W3CQuery.$(doc);
-    }
-    
-    public static XMLElement $(URI doc) {
-        return W3CQuery.$(doc);
-    }
-    
-    public static XMLElement $(Reader doc) {
-        return W3CQuery.$(doc);
-    }
-    
-    public static XMLElement $(InputStream doc) {
-        return W3CQuery.$(doc);
-    }
-    
-    public static XMLElements $(XMLElements... elements) {
-        return W3CQuery.$(elements);
-    }
-    
-    public static XMLElements $(XMLElement... elements) {
-        return W3CQuery.$(elements);
-    }
-
-}

+ 9 - 72
assira/src/main/java/net/ranides/assira/xml/XMLWriter.java

@@ -7,92 +7,29 @@
 
 package net.ranides.assira.xml;
 
-import java.io.Closeable;
 import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.StringWriter;
 import java.io.Writer;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.TransformerFactoryConfigurationError;
-import javax.xml.transform.stream.StreamResult;
-import net.ranides.assira.text.Charsets;
 
 /**
  *
  * @author Ranides Atterwim <ranides@gmail.com>
  */
-public class XMLWriter implements AutoCloseable, Closeable {
+public interface XMLWriter {
     
-    private final Writer writer;
-    
-    private final Transformer transformer;
-    
-    public XMLWriter() {
-        this((Writer)null);
-    }
-    
-    public XMLWriter(File file) throws FileNotFoundException {
-        this(new FileOutputStream(file));
-    }
-
-    public XMLWriter(OutputStream ostream) {
-        this(new OutputStreamWriter(ostream, Charsets.UTF8));
-    }
-    
-    public XMLWriter(Writer writer) {
-        try {
-            this.writer = writer;
-            this.transformer = TransformerFactory.newInstance().newTransformer();
-        } catch(TransformerFactoryConfigurationError | TransformerConfigurationException cause) {
-            throw new XMLException(cause);
-        }
-    }
-    
-    public XMLWriter write(XMLElement document) throws IOException {
-        document.apply(transformer, new StreamResult(writer));
-        return this;
-    }
-    
-    public String toString(XMLElement document) {
-        StringWriter out = new StringWriter();
-        document.apply(transformer, new StreamResult(out));
-        return out.toString();
-    }
+    XMLWriter save(File file) throws IOException;
 
+    XMLWriter save(OutputStream ostream) throws IOException;
 
-    @Override
-    public void close() throws IOException {
-        if(null != writer) {
-            writer.close();
-        }
-    }
+    XMLWriter save(Writer writer) throws IOException;
+    
+    String toString();
     
-    public XMLWriter param(XMLOptions param, String value) {
-        return param(param.key(), value);
-    }
+    XMLWriter param(XMLOptions param, String value);
     
-    public XMLWriter param(String param, String value) {
-        transformer.setOutputProperty(param, value);
-        return this;
-    }
+    XMLWriter param(String param, String value);
     
-    public XMLWriter indent(int size) {
-        if(size == 0) {
-            param(XMLOptions.INDENT, "no");
-        } else {
-            // we want to put "root tag" in new line after <?xml declaration?>
-            // DOCTYPE is workaround for strage bug in JDK formatter
-            param(XMLOptions.DOCTYPE_PUBLIC, ""); 
-            param(XMLOptions.INDENT, "yes");
-            param(XMLOptions.INDENT_AMOUNT, String.valueOf(size));
-        }
-        return this;
-    }
+    XMLWriter indent(int size);
 
 }

+ 0 - 6
assira/src/main/java/net/ranides/assira/xml/impl/CElements.java

@@ -20,7 +20,6 @@ import net.ranides.assira.text.StringUtils;
 import net.ranides.assira.xml.XMLContext;
 import net.ranides.assira.xml.XMLElement;
 import net.ranides.assira.xml.XMLElements;
-import net.ranides.assira.xml.XMLNamespace;
 import net.ranides.assira.xml.XMLSelector;
 import org.w3c.dom.Node;
 
@@ -112,11 +111,6 @@ public class CElements implements XMLElements {
         );
     }
 
-    @Override
-    public CQuery<XMLNamespace> ns() {
-        return stream(XMLElement::ns);
-    }
-
     @Override
     public int size() {
         return stream().size();

+ 2 - 2
assira/src/main/java/net/ranides/assira/xml/impl/W3CQuery.java

@@ -96,8 +96,8 @@ public final class W3CQuery {
             String wxml="<__fragment__>" + xml + "</__fragment__>";
             Document cdoc = builder().parse(new InputSource(new StringReader(wxml)));
             return target.document().node().importNode(cdoc.getDocumentElement(),true);
-        } catch(DOMException | IOException | ParserConfigurationException | SAXException cause) {
-            throw ExceptionUtils.rethrow(cause);
+        } catch(SAXException | DOMException | ParserConfigurationException | IOException cause) {
+            throw new XMLException(cause);
         }
     }
     

+ 0 - 16
assira/src/main/java/net/ranides/assira/xml/impl/W3Document.java

@@ -6,16 +6,10 @@
  */
 package net.ranides.assira.xml.impl;
 
-import java.io.IOException;
-import javax.xml.parsers.DocumentBuilderFactory;
 import net.ranides.assira.generic.CompareUtils;
-import net.ranides.assira.trace.ExceptionUtils;
 import net.ranides.assira.xml.XMLDocument;
 import net.ranides.assira.xml.XMLElement;
-import net.ranides.assira.xml.XMLQuery;
 import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Node;
 
 /**
  *
@@ -39,11 +33,6 @@ public class W3Document implements XMLDocument {
         return new W3Element(doc.createAttribute(name));
     }
 
-    @Override
-    public XMLElement attr(String ns, String name) {
-        return new W3Element(doc.createAttributeNS(ns, name));
-    }
-
     @Override
     public XMLElement cdata(String value) {
         return new W3Element(doc.createCDATASection(value));
@@ -69,11 +58,6 @@ public class W3Document implements XMLDocument {
         return new W3Element(doc.createElement(tag));
     }
 
-    @Override
-    public XMLElement tag(String ns, String tag) {
-        return new W3Element(doc.createElementNS(ns,tag));
-    }
-
     @Override
     public XMLElement entity(String name) {
         return new W3Element(doc.createEntityReference(name));

+ 5 - 6
assira/src/main/java/net/ranides/assira/xml/impl/W3Element.java

@@ -126,12 +126,6 @@ public class W3Element extends CElement implements XMLElement {
         return attrs().first(name);
     }
 
-    @Override
-    public XMLNamespace ns() {
-        // @todo (assira #3.5) xml: W3Element.ns
-        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
-    }
-
     @Override
     public XMLElements find(String selector) {
         return find(XMLSelector.compile(selector));
@@ -407,6 +401,11 @@ public class W3Element extends CElement implements XMLElement {
             throw new XMLException(cause);
         }
     }
+
+    @Override
+    public XMLWriter writer() {
+        return new W3Writer(this);
+    }
     
     private Node adopt(XMLElement element) throws DOMException {
         return document().node().adoptNode(element.node().cloneNode(true));

+ 2 - 2
assira/src/main/java/net/ranides/assira/xml/impl/W3Selectors.java

@@ -13,9 +13,9 @@ import javax.xml.xpath.XPathExpression;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 import net.ranides.assira.xml.XMLContext;
+import net.ranides.assira.xml.XMLElement;
 import net.ranides.assira.xml.XMLElements;
 import net.ranides.assira.xml.XMLException;
-import static net.ranides.assira.xml.XMLQuery.$false;
 import net.ranides.assira.xml.XMLSelector;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -98,7 +98,7 @@ public final class W3Selectors {
                 Document document = (Document)node;
                 return new CElements(W3Element.$stream(document.getElementsByTagName(tag)));
             }
-            return $false;
+            return XMLElement.$false;
         }
 
         @Override

+ 94 - 0
assira/src/main/java/net/ranides/assira/xml/impl/W3Writer.java

@@ -0,0 +1,94 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+
+package net.ranides.assira.xml.impl;
+
+import net.ranides.assira.xml.*;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.stream.StreamResult;
+import net.ranides.assira.text.Charsets;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public class W3Writer implements XMLWriter {
+    
+    private final XMLElement element;
+    
+    private final Transformer transformer;
+    
+    W3Writer(XMLElement element) {
+        try {
+            this.element = element;
+            this.transformer = TransformerFactory.newInstance().newTransformer();
+        } catch(TransformerFactoryConfigurationError | TransformerConfigurationException cause) {
+            throw new XMLException(cause);
+        }
+    }
+    
+    @Override
+    public W3Writer save(File file) throws IOException {
+        try(FileOutputStream ostream = new FileOutputStream(file)) {
+            return save(ostream);
+        }
+    }
+
+    @Override
+    public W3Writer save(OutputStream ostream) throws IOException {
+        return save(new OutputStreamWriter(ostream, Charsets.UTF8));
+    }
+
+    @Override
+    public W3Writer save(Writer writer) throws IOException {
+        element.apply(transformer, new StreamResult(writer));
+        return this;
+    }
+    
+    @Override
+    public String toString() {
+        StringWriter out = new StringWriter();
+        element.apply(transformer, new StreamResult(out));
+        return out.toString();
+    }
+    
+    @Override
+    public W3Writer param(XMLOptions param, String value) {
+        return param(param.key(), value);
+    }
+    
+    @Override
+    public W3Writer param(String param, String value) {
+        transformer.setOutputProperty(param, value);
+        return this;
+    }
+    
+    @Override
+    public W3Writer indent(int size) {
+        if(size == 0) {
+            param(XMLOptions.INDENT, "no");
+        } else {
+            // we want to put "root tag" in new line after <?xml declaration?>
+            // DOCTYPE is workaround for strage bug in JDK formatter
+            param(XMLOptions.DOCTYPE_PUBLIC, ""); 
+            param(XMLOptions.INDENT, "yes");
+            param(XMLOptions.INDENT_AMOUNT, String.valueOf(size));
+        }
+        return this;
+    }
+
+}

+ 1 - 2
assira/src/test/java/net/ranides/assira/xml/XMLQueryTest.java

@@ -14,9 +14,8 @@ import javax.xml.transform.TransformerConfigurationException;
 import net.ranides.assira.TestFiles;
 import net.ranides.assira.collection.maps.MultiMap;
 import static net.ranides.assira.junit.NewAssert.*;
-import static net.ranides.assira.xml.XMLQuery.$;
+import static net.ranides.assira.xml.XMLElement.$;
 import org.junit.Test;
-import static net.ranides.assira.xml.XMLQuery.$;
 
 /**
  *

+ 8 - 9
assira/src/test/java/net/ranides/assira/xml/XMLWriterTest.java

@@ -13,7 +13,7 @@ import net.ranides.assira.text.Charsets;
 import net.ranides.assira.text.IOStrings;
 import org.junit.Test;
 import static org.junit.Assert.*;
-import static net.ranides.assira.xml.XMLQuery.$;
+import static net.ranides.assira.xml.XMLElement.$;
 
 /**
  *
@@ -30,25 +30,24 @@ public class XMLWriterTest {
         doc.find("? mail[3]").text("office@c...");
         doc.find("? mail/@type").text("hidden");
         
-        String out1 = new XMLWriter().indent(0).toString(doc);
+        String out1 = doc.writer().indent(0).toString();
         
-        String out2 = new XMLWriter()
+        String out2 = doc.writer()
             .param(XMLOptions.DOCTYPE_PUBLIC, "yes")
             .param(XMLOptions.INDENT, "yes")
             .param(XMLOptions.INDENT_AMOUNT, "2")
-            .toString(doc);
+            .toString();
         
         StringOutput out3 = new StringOutput();
-        new XMLWriter(out3)
+        doc.writer()
             .param(XMLOptions.DOCTYPE_PUBLIC, "")
             .param(XMLOptions.INDENT, "yes")
             .param(XMLOptions.INDENT_AMOUNT, "2")
-            .write(doc)
-            .close();
+            .save(out3);
         
-        String out4 = new XMLWriter()
+        String out4 = doc.writer()
             .indent(4)
-            .toString(doc);
+            .toString();
         
 //        System.out.printf("%n%s%n", out1);
 //        System.out.printf("%n%s%n", out2);

+ 1 - 2
assira/src/test/java/net/ranides/assira/xml/impl/CElementTest.java

@@ -10,8 +10,7 @@ import net.ranides.assira.xml.XMLElement;
 import org.junit.Test;
 import static net.ranides.assira.junit.NewAssert.*;
 import net.ranides.assira.TestFiles;
-import static net.ranides.assira.xml.XMLQuery.$;
-import static net.ranides.assira.xml.XMLQuery.$;
+import static net.ranides.assira.xml.XMLElement.$;
 
 /**
  *

+ 6 - 12
assira/src/test/java/net/ranides/assira/xml/impl/CElementsTest.java

@@ -13,7 +13,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.function.Function;
-import java.util.stream.Collectors;
 import net.ranides.assira.collection.iterators.IteratorUtils;
 import net.ranides.assira.collection.lists.ListUtils;
 import net.ranides.assira.collection.suite.IteratorTester;
@@ -27,8 +26,7 @@ import net.ranides.assira.xml.XMLDocument;
 import net.ranides.assira.xml.XMLElements;
 import org.junit.Test;
 import net.ranides.assira.xml.XMLSelector;
-import net.ranides.assira.xml.XMLWriter;
-import static net.ranides.assira.xml.XMLQuery.$;
+import static net.ranides.assira.xml.XMLElement.$;
 
 /**
  *
@@ -323,10 +321,10 @@ public class CElementsTest {
         doc.find("? //user/@id").content(".");
         doc.find("nomail").text("HIDDEN");
         
-        assertEquals(exp1, new XMLWriter().toString(t1));
-        assertEquals(exp2, new XMLWriter().toString(t2));
+        assertEquals(exp1, t1.writer().toString());
+        assertEquals(exp2, t2.writer().toString());
         
-        String out = new XMLWriter().indent(4).toString(doc);
+        String out = doc.writer().indent(4).toString();
 //        System.out.printf("%s%n", out);
         assertEquals(IOStrings.read(TestFiles.XML_ELEMENTS, Charsets.UTF8), out);
         
@@ -342,15 +340,11 @@ public class CElementsTest {
         doc.find("configuration").append(ddoc2);
         
         doc.find("configuration var2").content("<ul class='list'><li>a</li><li>b</li></ul>");
-        String out2 = new XMLWriter().indent(4).toString(doc);
+        String out2 = doc.writer().indent(4).toString();
         
-        System.out.printf("%s%n", out2);
+//        System.out.printf("%s%n", out2);
         assertEquals(IOStrings.read(TestFiles.XML_CONTENT, Charsets.UTF8), out2);
         
     }
     
-    private void debug(String format, List<String> list) {
-        System.out.printf(format, list.stream().map(StringUtils::quote).collect(Collectors.toList()));
-    }
-    
 }

+ 2 - 3
assira/src/test/java/net/ranides/assira/xml/impl/W3AttributesTest.java

@@ -22,8 +22,7 @@ import net.ranides.assira.text.IOStrings;
 import net.ranides.assira.xml.XMLSelector;
 import org.junit.Test;
 import org.w3c.dom.Node;
-import static net.ranides.assira.xml.XMLQuery.$;
-import net.ranides.assira.xml.XMLWriter;
+import static net.ranides.assira.xml.XMLElement.$;
 
 
 /**
@@ -134,7 +133,7 @@ public class W3AttributesTest {
         assertEquivalent(Arrays.asList(), allmap.getAll("hash"));
         assertEquivalent(Arrays.asList(), allmap.getAll(888));
         
-        String out = new XMLWriter().indent(4).toString(doc.find("users").first());
+        String out = doc.find("users").first().writer().indent(4).toString();
         String exp = IOStrings.read(TestFiles.XML_ATTR, Charsets.UTF_8);
         assertEquals(exp, out);
     }

+ 2 - 3
assira/src/test/java/net/ranides/assira/xml/impl/W3DocumentTest.java

@@ -13,8 +13,7 @@ import net.ranides.assira.collection.maps.MultiMap;
 
 import net.ranides.assira.xml.XMLDocument;
 import net.ranides.assira.xml.XMLElement;
-import static net.ranides.assira.xml.XMLQuery.$;
-import net.ranides.assira.xml.XMLWriter;
+import static net.ranides.assira.xml.XMLElement.$;
 import org.junit.Test;
 import static net.ranides.assira.junit.NewAssert.*;
 import net.ranides.assira.text.Charsets;
@@ -90,7 +89,7 @@ public class W3DocumentTest {
         doc.find("body").first().append(fragment);
         
         String exp = IOStrings.read(TestFiles.XML_DOC, Charsets.UTF8);
-        String out = new XMLWriter().indent(4).toString(doc);
+        String out = doc.writer().indent(4).toString();
         
         assertEquals(exp, out);
         

+ 4 - 5
assira/src/test/java/net/ranides/assira/xml/impl/W3ElementTest.java

@@ -20,10 +20,9 @@ import net.ranides.assira.text.IOStrings;
 import net.ranides.assira.xml.XMLElement;
 import net.ranides.assira.xml.XMLException;
 import net.ranides.assira.xml.XMLSelector;
-import net.ranides.assira.xml.XMLWriter;
 import org.junit.Test;
 import static net.ranides.assira.junit.NewAssert.*;
-import static net.ranides.assira.xml.XMLQuery.$;
+import static net.ranides.assira.xml.XMLElement.$;
 
 /**
  *
@@ -40,7 +39,7 @@ public class W3ElementTest {
         assertEquals(IClass.typeinfo(String.class), user.type());
         user.set("10166");
         
-        assertEquals(IOStrings.read(TestFiles.XML_5, Charsets.UTF8), new XMLWriter().indent(4).toString(user.parent().normalize()));
+        assertEquals(IOStrings.read(TestFiles.XML_5, Charsets.UTF8), user.parent().normalize().writer().indent(4).toString());
     }
     
     @Test
@@ -110,8 +109,8 @@ public class W3ElementTest {
         XMLElement out = doc.apply($(TestFiles.XSL_USERS));
         XMLElement dom = $(doc.apply($(TestFiles.XSL_USERS), new DOMResult()).getNode());
         
-        String sout = new XMLWriter().indent(4).toString(out);
-        String sdom = new XMLWriter().indent(4).toString(dom);
+        String sout = out.writer().indent(4).toString();
+        String sdom = dom.writer().indent(4).toString();
         
 //        System.out.printf("%s%n", sout);
         

+ 1 - 3
assira/src/test/java/net/ranides/assira/xml/impl/W3SelectorsTest.java

@@ -12,12 +12,10 @@ import net.ranides.assira.junit.NewAssert;
 import net.ranides.assira.xml.XMLElement;
 import net.ranides.assira.xml.XMLElements;
 import net.ranides.assira.xml.XMLException;
-import static net.ranides.assira.xml.XMLQuery.$;
+import static net.ranides.assira.xml.XMLElement.$;
 import net.ranides.assira.xml.XMLSelector;
 import org.junit.Test;
 import static org.junit.Assert.*;
-import org.junit.Ignore;
-import static net.ranides.assira.xml.XMLQuery.$;
 
 /**
  *