1 module hunt.xml.Document; 2 3 import hunt.xml.Attribute; 4 import hunt.xml.Common; 5 import hunt.xml.Element; 6 import hunt.xml.Node; 7 import hunt.xml.Internal; 8 import hunt.xml.DocumentParser; 9 10 import hunt.xml.Writer; 11 12 import std.array : Appender; 13 14 import hunt.logging.ConsoleLogger; 15 16 /** 17 * 18 */ 19 class Document : Element { 20 this() { 21 super(NodeType.Document); 22 } 23 24 this(string name) { 25 super(name, NodeType.Document); 26 } 27 28 static Document load(string fileName) { 29 import std.file; 30 return parse(readText(fileName)); 31 } 32 33 static Document parse(ParsingFlags Flags = ParsingFlags.Full)(string text) { 34 return DocumentParser.parse!(Flags)(text); 35 } 36 37 void save(string fileName, bool isIndented = true) { 38 import std.stdio; 39 auto file = File(fileName, "w"); 40 scope(exit) { 41 file.close(); 42 } 43 auto textWriter = file.lockingTextWriter; 44 if(isIndented) { 45 auto writer = buildWriter(textWriter, PrettyPrinters.Indenter()); 46 writer.write(this); 47 } else { 48 auto writer = buildWriter(textWriter, PrettyPrinters.Minimalizer()); 49 writer.write(this); 50 } 51 } 52 53 string toPrettyString() { 54 auto appender = Appender!string(); 55 auto writer = buildWriter(appender, PrettyPrinters.Indenter()); 56 writer.write(this); 57 return appender.data(); 58 } 59 60 override string toString() { 61 auto appender = Appender!string(); 62 auto writer = buildWriter(appender, PrettyPrinters.Minimalizer()); 63 writer.write(this); 64 return appender.data(); 65 } 66 }