Phân tích XML trong Dart
Xem thêm các chuyên mục:

Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.


Dart-XML là một thư viện gọn nhẹ được sử dụng để phân tích cú pháp (parse), duyệt (traverse), truy vấn, biến đổi (transform) và xây dựng các tài liệu XML. Dart-xml là thư viện mã nguồn mở và phổ biến nhất trong số các thư viện tương tự dành cho Dart.
Mã nguồn của Dart-xml được duy trì trên GitHub:
Một thư viện khác tương tự là Dart xml_parser, ít phổ biến hơn một chút so với Dart-xml:
- TODO Link?
<?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>

Dart xml API tuân thủ các tiêu chuẩn W3C DOM, vì vậy sẽ rất dễ dàng để sử dụng nếu bạn đã từng làm việc với bất kỳ một thư viện nào tuân thủ theo tiêu chuẩn này trước đó (của bất kỳ ngôn ngữ nào).
W3C DOM là một mô hình dạng cây. Trong thư viện Dart xml, các lớp đại diện cho các Node của cây đều bắt đầu bởi tiếp đầu ngữ "Xml", chẳng hạn XmlDocument, XmlElement, XmlAttribute, XmlText,...
Với các dự án Dart:
dart pub add xml
Với các dự án Flutter:
flutter pub add xml
Hoặc khai báo thư viện XML này trong file pubspec.yaml:
pubspec.yaml
dependencies:
xml:
Trong thư viện Dart-xml, lớp XmlDocument đại diện cho một tài liệu XML. Lớp này cung cấp một constructor và một phương thức nhà máy tĩnh để tạo đối tượng XmlDocument.
factory XmlDocument.parse(String input, {XmlEntityMapping? entityMapping}) // Factory method
// Create a document node with `children`.
XmlDocument([Iterable<XmlNode> childrenIterable = const []]) // Constructor.
Phương thức nhà máy tĩnh XmlDocument.parse được sử dụng để phân tích cú pháp (parse) một văn bản XML và trả về một đối tượng XmlDocument, nếu văn bản không hợp lệ, XmlParserException sẽ được ném ra.
Đầu vào là một văn bản XML:
dart-xml-text-ex1.dart
import 'package:xml/xml.dart';
void main() {
final bookshelfXml = '''<?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>''';
final document = XmlDocument.parse(bookshelfXml);
var xml = document.toXmlString(pretty: true);
print(xml);
}
Đầu vào là một file:
dart-xml-file-ex1.dart
import 'package:xml/xml.dart';
import 'dart:io';
void main() {
var inputFile = File('./input/bookshelf.xml');
var xmlText = inputFile.readAsStringSync();
final document = XmlDocument.parse(xmlText);
var xml = document.toXmlString(pretty: true);
print(xml);
}
Đầu vào từ một URL:
dart-xml-url-ex1.dart
// Need to add http library to pubspec.yaml
// dependencies:
// http:
import 'package:http/http.dart' as http;
import 'package:xml/xml.dart';
void main() async {
var url = 'https://ex1.o7planning.com/testdata/dart/bookshelf.xml';
var uri = Uri.parse(url); // Uri object.
var xmlContent = await http.read(uri); // String
final document = XmlDocument.parse(xmlContent);
var xml = document.toXmlString(pretty: true);
print(xml);
}
Xem thêm cách cài đặt và sử dụng thư viện Dart http:
- TODO Link?
Ví dụ: Đọc nội dung tài liệu XML:

dart-xml-ex1.dart
import 'package:xml/xml.dart';
void main() {
final bookshelfXml = '''<?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>''';
final document = XmlDocument.parse(bookshelfXml);
var rootElement = document.rootElement;
var priceElement = rootElement.getElement('price');
print('BookShelf price: ${priceElement!.text}');
var bookElements = rootElement.findElements('book'); // Iterable<XmlElement>
for (var bookElement in bookElements) {
var titleElement = bookElement.getElement('title');
var priceElement = bookElement.getElement('price');
var title = titleElement!.text; // String
var lang = titleElement.getAttribute('lang'); // String
var price = priceElement!.text; // String
print('Book: ${title}, Language: ${lang}, price: ${price}');
}
}
Output:
BookShelf price: 132.00
Book: Growing a Language, Language: english, price: 29.99
Book: Learning XML, Language: english, price: 39.95
Ví dụ: Sửa đổi tài liệu XML:
dart-xml-ex1.dart
import 'package:xml/xml.dart';
void main() {
final bookshelfXml = '''<?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>''';
final document = XmlDocument.parse(bookshelfXml);
var rootElement = document.rootElement;
var bookElements = rootElement.findElements('book'); // Iterable<XmlElement>
for (var bookElement in bookElements) {
var titleElement = bookElement.getElement('title');
var priceElement = bookElement.getElement('price');
var title = titleElement!.text; // String
titleElement.innerText = title.toUpperCase(); // Update text
var lang = titleElement.getAttribute('lang'); // String
titleElement.setAttribute('lang', lang!.toUpperCase());
var price = double.parse(priceElement!.text); // double
priceElement.innerText = (price * 2).toString();
}
print(document.toXmlString(pretty: true));
}
Output:
<?xml version="1.0"?>
<bookshelf>
<book>
<title lang="ENGLISH">GROWING A LANGUAGE</title>
<price>59.98</price>
</book>
<book>
<title lang="ENGLISH">LEARNING XML</title>
<price>79.9</price>
</book>
<price>132.00</price>
</bookshelf>