MoonBit XML base: spec-shaped document model, namespace-aware pull parsing with BOM/encoding detection, canonical serialization, and W3C XML Conformance coverage.
moon add thy1016/moonxmlmatch @moonxml.parse("<r><a>1</a><b x=\"2\"/></r>") {
Ok(doc) => println(doc.to_xml())
Err(_) => println("parse failed")
}// XML 1.0 四版次全表名字面(Edition5 为现行第五版紧凑面)
let opts_edition = @moonxml.parse_edition(
source,
edition: @moonxml.XmlEdition::Editions1to4,
)
// 非 NS 面:名字原文直通,xmlns 即普通属性
let ns_off = @moonxml.parse_edition(
source,
edition: @moonxml.XmlEdition::Edition5,
ns: @moonxml.NsMode::Off,
)// BOM 嗅探 + 声明面编码决策;不支持面返回 Encoding 错
match @moonxml.decode_source(bytes) {
Ok(text) => println("decoded \{text.length()} chars")
Err(_) => println("unsupported encoding")
}// resolver : &EntityResolver——实现 resolve(public_id, system_id, base)
// 返回 None 表示拒取;构造时经 parse_edition 的 resolver 参数注入。| 入口 | 作用 |
|---|---|
| parse | 字符串 → Document(NS-aware,实体已展开) |
| parse_edition | 全参入口:版次面 + NS 面 + 实体解析器 |
| decode_source | Bytes → 文本(BOM 嗅探 + 声明面编码决策) |
| Document::to_xml | 规范化序列化(往返稳定形) |
| is_name_start_char_11 等 | 名字产生式区间表谓词(1.0 四版次 / 1.1 双面) |
moon test --target native| 面 | 读数 |
|---|---|
| W3C XML Conformance(xmlts20130923,2585 案) | 2572 passed / 13 deferred / 0 failed |
| 单元与契约门 | 120 / 120 |
pub(open) trait EntityResolver {
fn resolve(Self, base : String?, system_id : String, public_id : String?) -> Bytes?
}pub(all) suberror XmlErrorKind {
UnexpectedEof
InvalidSyntax(String)
UnmatchedTag(expected~ : String, found~ : String)
InvalidAttribute(String)
InvalidEntity(String)
Encoding(String)
IllegalChar(Int)
IllegalName(String)
Structure(String)
External(String)
} derive(Eq)pub(all) struct XmlName {
qualified_name : String
prefix : String?
local_name : String
namespace_uri : String?
} derive(Eq)fn parse_edition(source : String, edition~ : XmlEdition, ns? : NsMode, resolver? : &EntityResolver?) -> Result[Document, XmlError]Install
Download zipMoonBit XML base: spec-shaped document model, namespace-aware pull parsing with BOM/encoding detection, canonical serialization, and W3C XML Conformance coverage.