【问题标题】:dart xml with external files带有外部文件的飞镖 xml
【发布时间】:2016-08-08 07:56:55
【问题描述】:

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

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

我将如何从 dart-xml https://github.com/renggli/dart-xml 编写给定的示例?我可以使用

将其打印到 shell
print(bookshelfXml.toString());

但是我如何保存 ||将其通过管道传输到外部文件?我曾尝试使用 dart:io,但目前没有任何成功。

【问题讨论】:

  • 这是运行在浏览器还是服务器上的代码?
  • 嗨 Zochi,目前我正在研究 dart:io 以便能够提供 xml 文件。但是,我希望最终能够为聚合物元素提供 xml 和 xslt 文件。

标签: xml dart


【解决方案1】:

感谢 renggli @ github, zoeichi 对 dart:io 的帮助。

要使用外部文件尝试来自dart-xml repo 的示例;

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

【讨论】:

    【解决方案2】:

    这应该做你想做的:

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

    另见:

    【讨论】:

    • 谢谢。效果很好。我刚刚更改了小错字错误' var file = new File('pathToFile.xml'); file.writeAsString(bookshelfXml.toString());'
    • 如何解析外部文档?如果我将其作为字符串读入,则 'xml.parse(importedFile.xml);'只返回错误。
    • 如果我在 dart-xml git 页面上使用提供的示例,那么它以 'var document = xml.parse(bookshelfXml);' 结尾但是我怎么能用外部文件而不是在 dart 文件本身中包含 xml 呢?
    • 非常感谢,冈瑟。我很高兴我问了。 (附言在您提供的代码中添加了结束引号;'xml.parse(new File('myfile.xml').readAsStringSync());'
    • 我明白了。对不起这个错误。如果这回答了您的问题,那么如果您可以接受答案以表明您的问题已通过单击向上/向下投票按钮下方的白色复选标记来解决,那就太好了。
    猜你喜欢
    • 2021-11-20
    • 2021-12-18
    • 2020-09-20
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2020-04-12
    相关资源
    最近更新 更多