#xml #xml-parser #writer #reader #parser #reader-writer

xml-doc

以树形结构读取、修改和写入XML。支持UTF-16。

3个不稳定版本

0.2.0 2021年10月12日
0.1.1 2021年10月9日
0.1.0 2021年10月9日

#106 in #xml-parser

每月30次下载

MIT/Apache

64KB
1K SLoC

xml-doc

xml-doc是一个Rust库,用于读取、修改和写入XML文档。文档

它的目标是能够读取任何XML文件,并仅修改您想修改的部分。

功能

  • 支持从大多数编码中读取,包括UTF-16。(不包括UTF-32)
  • 您可以引用树的部分,同时还可以修改树。
  • 元素存储对其父元素的引用,因此向上遍历树非常快。
  • 最快的XML树形解析器和写入器之一。请参阅#性能
  • 支持属性值规范化、字符/实体引用。

由于其架构,您无法在文档之间交换节点或元素。如果您的项目同时修改多个XML文档,则此库可能不是最佳选择。

示例

use xml_doc::{Document, Element};

let XML = r#"<?xml version="1.0"?>
<package xmlns:dc="http://purl.org/dc/elements/1.1/">
    <metadata>
        <dc:title>xml-doc</dc:title>
        <dc:rights>MIT or Apache 2.0</dc:rights>
    </metadata>
</package>
"#;

let doc = Document::parse_str(XML).unwrap();
let package = doc.root_element().unwrap();
let metadata = package.find(&doc, "metadata").unwrap();
let title = metadata.find(&doc, "title").unwrap();
title.set_attribute("xml:lang", "en");

// Add an element to metadata: <dc:creator id="author">Yoonchae Lee</dc:creator>
let author = Element::build(&mut doc, "dc:creator")
    .text_content("Yoonchae Lee")
    .attribute("id", "author")
    .push_to(metadata);

let new_xml = doc.write_str();

性能

要运行基准测试: cd benches ; cargo bench

解析

                  tiny(4.8KB) medium(1.5MB) large(25MB) medium(UTF-16)
xml_doc v0.2.0:     73.79us     29.74ms      341.05ms      29.16ms
minidom v0.12.0:    85.19us     40.09ms      565.04ms
roxmltree v0.14.1:  49.34us     16.33ms      330.90ms
xmltree v0.10.3:  4065.8 us   1204.7 ms    21198.  ms

仅支持读取而不支持写入的roxmltree,其速度远快于xml_doc。您可以在此处查看基准测试结果这里

依赖关系

~4.5MB
~140K SLoC