2016-08-08 93 views
1

我已经能够遵循dart-xml的所有示例,但只适用于包含变量中的xml的dart文件。如何解析和创建外部XML文件?dart xml与外部文件

如果我尝试直接导入xml文件,dart通常会卡在xml文件'<'的第一个字符上。

我该如何编写dart-xml https://github.com/renggli/dart-xml的给定示例?我可以打印到壳使用

print(bookshelfXml.toString()); 

但如何保存||管它到外部文件?我尝试过使用dart:io,但目前没有任何成功。

+0

这是代码在浏览器还是服务器上运行? –

+0

嗨Zochi,目前我只是在dart上工作:io能够提供xml文件。但是,我希望最终可以为聚合物元素提供xml和xslt文件。 – lubi

回答

1

这应该做你想要什么:

import 'dart:io'; 

... 

var file = new File('path/to/file.xml'); 
file.writeAsString(bookshelfXml.toString()); 

参见:

+1

谢谢。这工作正常。我刚刚更改了小写错误'var file = new File('pathToFile.xml'); file.writeAsString(bookshelfXml.toString());' – lubi

+0

如何解析外部文档?如果我以字符串的形式读取它,'xml.parse(importedFile.xml);'只会返回错误。 – lubi

+0

什么是'importedFile.xml'?什么错误? –

1

谢谢renggli @ github,zoeichi for dart:io援助。

要做dart-xml回购与外部文件尝试的例子;

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); 
    }); 
}