0

次の構造の XML ファイルがあります。

<?xml version='1.0' encoding='UTF8'?>
<root>
    <row filter="FILTER STRING"> // THIS IS THE FIRST "ROW"
        <id>100</id>
        <name>Some nome here</name>
        <text>TEXT CONTENT HERE</text>
    </row>
    <row filter="FILTER STRING"> // THIS IS THE SECOND "ROW"
        <id>101</id>
        <name>Some nome here</name>
        <text>TEXT CONTENT HERE</text>
    </row>
</root>

たった 1 つの XML ファイルに多数の行ノードがあり、この構造を変更することはできません。

では、XML パッケージを使用して、特定のノードからテキスト コンテンツを取得できるようにするには、どうすればよいでしょうか?

たとえば、2 行目の「name」というノードからテキストを取得したいと考えています。

編集:

ここのところ:

void main() {
    _readFile("test_UTF8.xml").then((xmlContent) {
        var parsedXml = parse(xmlContent);
            parsedXml.findAllElements("row").forEach((row) {
                // EACH "ROW" NODE WILL BE ITERATED HERE.
                // READ "ROW" CHILDREN NODES HERE.
                // FOR EXAMPLE: GET "NAME"'S TEXT CONTENT.
            });
    });
}

Future _readFile(String filename) {
    var completer = new Completer();
    new File(filename).readAsString().then((String xmlContent) {
        completer.complete(xmlContent);
    });
    return completer.future;
}
4

1 に答える 1

1

Completerおそらくここは必要ありません

Future _readFile(String filename) {
  // a return here achieves the same in most cases
  return new File(filename).readAsString();
  // because this makes this method so short it doen't make much sense to 
  // even create a method for this
}

私は実際にこのコードを試していませんがREADME.md、パッケージの によると、次のように動作するはずです:

void main() {
  new File("test_UTF8.xml").readAsString()
  .then((xmlContent) {
    var parsedXml = parse(xmlContent);
    return parsedXml.findElements("root")
        .first.findElements("row").toList()[1]
            .findElements('name').first.text; // <= modified
  })
  .then((text) {
    print(text);
  }); 
}
于 2014-11-12T14:24:44.690 に答える