Reputation: 147
I've been able to follow all the examples of dart-xml but that is only for a dart file containing xml in a variable. How to i parse and create external xml files?
If I try and import an xml file directly dart usually gets stuck on the first character of the xml file '<'.
How would I write the given example from dart-xml https://github.com/renggli/dart-xml? I can print it to the shell using
print(bookshelfXml.toString());
but how to i save || pipe it to an external file? I've tried to use dart:io a little but not having any success at the moment.
Upvotes: 2
Views: 1376
Reputation: 147
Thanks renggli @ github, zoeichi for dart:io assistance.
To do the examples from the dart-xml repo with external files try;
import 'dart:io';
import 'package:xml/xml.dart' as xml;
void main (){
//create file bookshelf.xml seperately using example on github.
// <?xml version="1.0"?>
// <bookshelf>
// <book>
// <title lang="english">Growing a Language</title>
// <price>29.99</price>
// </book>
// <book>
// <title lang="english">Learning XML</title>
// <price>39.95</price>
// </book>
// <price>132.00</price>
// </bookshelf>
//parse external file
var book = xml.parse(new File('bookshelf.xml').readAsStringSync());
print(book.toString());
print('---');
//finding elements
var titles = book.findAllElements('title');
titles
.map((node) => node.text)
.forEach(print);
//finding elements, convert strings to compute sum
var total = book.findAllElements('book')
.map((node) => double.parse(node.findElements('price').single.text))
.reduce((a, b) => a + b);
print(total);
print('---');
//build external file using example
var builder = new xml.XmlBuilder();
builder.processing('xml', 'version="1.0"');
builder.element('bookshelf', nest: () {
builder.element('book', nest: () {
builder.element('title', nest: () {
builder.attribute('lang', 'english');
builder.text('Growing a Language');
});
builder.element('price', nest: 29.99);
});
builder.element('book', nest: () {
builder.element('title', nest: () {
builder.attribute('lang', 'english');
builder.text('Learning XML');
});
builder.element('price', nest: 39.95);
});
builder.element('price', nest: 132.00);
});
var bookshelfXml = builder.build();
//create and write eternal file name and contents
var buildXml = new File('bookshelfDartCreated.xml');
buildXml.writeAsString(bookshelfXml.toString());
//check newly created file
new File('bookshelfDartCreated.xml').readAsString().then((String contents) {
print(contents);
});
}
Upvotes: 2
Reputation: 657676
This should do what you want:
import 'dart:io';
...
var file = new File('path/to/file.xml');
file.writeAsString(bookshelfXml.toString());
See also:
Upvotes: 1