module transformtango; import tango.io.Buffer; import tango.io.File; import tango.io.Stdout; import tango.time.StopWatch; import tango.text.xml.Document; import tango.text.xml.DocPrinter; import tango.text.xml.XmlPrinter; /******************************************************************************* *******************************************************************************/ void main() { StopWatch w; uint count = 1000; int intRes = 0; auto doc = new Document!(char); auto content = cast (char[]) File("blog.xml").read; //auto print = new DocPrinter!(char); auto print = new XmlPrinter!(char); auto buf = new Buffer (content.length * 2); w.start; for (uint i = count; --i;) { //parse the doc doc.parse(content); //count(//*) intRes = doc.query.descendant.count; // return every item, as if we are going to list them // //item auto set = doc.query.descendant("item"); // return every item, as if we are going to list them // /blog/item set = doc.query["blog"]["item"]; // all text nodes // //text() set = doc.query.descendant.data; // count of every item // cont(//item) intRes = doc.query.descendant("item").count; // count of every item, knowing the schema // count(/blog/item) intRes = doc.query["blog"]["item"].count; // finding an item element knowing the "id", contained in an attribute // /blog/item[@num='a781'] set = doc.query["blog"]["item"].filter((doc.Node n) {return n.hasAttribute("num","a781");}); foreach(node; set) node.detach; // /blog/item/body/p/a set = doc.query["blog"]["item"]["body"]["p"]["a"]; foreach(node; set) node.detach; //serialze the result print (doc.root, (char[][] s...){foreach(t; s) buf.append(t);}); //buf.write(print(doc)); buf.clear; } Stdout.formatln("cycle complete in average of {} ms", w.stop/count*1000); File("blog2.xml").write(print(doc)); }