Xml SAX 解析模式使用

如下代码展示了通过实现 SaxHandler 接口来完成 SAX 模式解析的操作示例。

import std.collection.* import encoding.xml.* let latestMovie = """ <collection shelf="New Arrivals"> <movie title="Movie 2021"> <score>7.4</score> <year>2021-3</year> <description>This is a virtual film released in 2021 for testing.</description> </movie> <movie title="Movie 2022"> <type>Anime, Science Fiction</type> <score>7</score> <year>2022-2</year> <description>This is a virtual film released in 2022 for testing.</description> </movie> <movie title="Movie 2023"> <score>6.5</score> <year>2023-4</year> <description>This is a virtual film released in 2023 for testing.</description> </movie> </collection> """ // 实现 SaxHandler 接口 class MovieHandler <: SaxHandler { private var curTag: String private var title: String private var score: String private var year: String init() { curTag = "" title = "" score = "" year = "" } public func startDocument(): Unit { println("Start Parsing.") } public func endDocument(): Unit { println("End Parsing.") } public func startElement(name: String, attrs: ArrayList<XmlAttr>): Unit { curTag = name if (name == "movie") { title = attrs[0].content println("Title: ${title}") } } public func endElement(name: String): Unit { if (curTag == "score") { println("Score: ${score}") } else if (curTag == "year") { println("Year: ${year}") } } public func characters(content: String): Unit { if (curTag == "score") { score = content } else if (curTag == "year") { year = content } } } main() { // 初始化 SaxHandler,并通过它初始化 XmlParser var handler = MovieHandler() let x: XmlParser = XmlParser(handler) // 调用 XmlParser 的 parse 方法进行解析 x.parse(latestMovie) return 0 }

运行结果如下:

Start Parsing. Title: Movie 2021 Score: 7.4 Year: 2021-3 Title: Movie 2022 Score: 7 Year: 2022-2 Title: Movie 2023 Score: 6.5 Year: 2023-4 End Parsing.