Phân tích XML trong Dart
1. Dart-XML
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:
- Dart XML parser
<?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,...
2. Cài đặt thư viện
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:
3. Các loại đầu vào 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:
4. Ví dụ
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>
Các hướng dẫn lập trình Dart
- Kiểu dữ liệu Boolean trong Dart
- Hướng dẫn và ví dụ hàm trong Dart
- Hướng dẫn và ví dụ Dart Closures
- Interface trong Dart
- Hướng dẫn và ví dụ phương thức trong Dart
- Constructor trong Dart
- Property trong Dart
- Toán tử chấm chấm (..) trong Dart
- Hướng dẫn và ví dụ Dart Generics
- Lập trình Dart với công cụ trực tuyến DartPad
- Cài đặt Dart SDK trên Windows
- Cài đặt Visual Studio Code trên Windows
- Cài đặt Dart Code Extension cho Visual Studio Code
- Cài đặt Dart Plugin cho Android Studio
- Chạy ví dụ Dart đầu tiên của bạn trong Visual Studio Code
- Chạy ví dụ Dart đầu tiên của bạn trong Android Studio
- Dart JSON với thư viện dart:convert
- Hướng dẫn và ví dụ Dart List
- Biến (Variable) trong ngôn ngữ Dart
- Hướng dẫn và ví dụ Dart Map
- Vòng lặp trong Dart
- Xử lý Dart JSON với gói dart_json_mapper
- Trình chuyển đổi mã nguồn (Transpiler) là gì?
- Phân tích XML trong Dart
- Hướng dẫn và ví dụ Dart http
- Hướng dẫn và ví dụ Dart Future
- Các phương thức mở rộng (Extension) trong Dart
- Mixins trong Dart
- Bài thực hành Dart phân tích JSON với gói dart:convert
- Bài thực hành Dart http CRUD
- Từ khoá part và part of trong Dart
- Hướng dẫn và ví dụ Dart Dio
Show More