介绍
一个标准的 XML 文本处理的工具。
特性
-
🚀 支持Xml DOM 解析模式
-
🚀 支持Xml SAX 解析模式
软件架构
架构图
源码目录
.
├── README.md
├── doc
├── libxml_c
├── src
│ ├── native.cj
│ └── XmlParser.cj
│
├── test
│ ├── DOC
│ ├── FUZZ
│ ├── HLT
│ ├── LLT
│ └── UT
├── CHANGELOG.md
├── LICENSE.txt
├── module.json
├── README.md
├── README.OpenSource
doc文档目录,用于存API接口文档libxml_c需要自行编译的c文件src是库源码目录test存放 HLT 测试用例、LLT 自测用例、DOC 示例用例、FUZZ用例、UT 单元测试用例
接口说明
主要是核心类和成员函数说明,详情见 API
使用说明
编译
libxml2 编译
- linux 编译
进入 libxml2 根目录,执行下面语句。
var=`awk '/set_target_properties.*/{print NR;exit;}' CMakeLists.txt` && sed -i ''"$var"',+10{/VERSION/d}' CMakeLists.txt
1.1 x86-64
cmake ./ -DCMAKE_BUILD_TYPE=Release
make
1.2 aarch64
cmake ./ -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -D LIBXML2_WITH_ICONV=OFF -D LIBXML2_WITH_LZMA=OFF -D LIBXML2_WITH_PYTHON=OFF -D LIBXML2_WITH_ZLIB=OFF
make
2. winows 编译
下载msys2和mingw64
msys2:github.com/msys2/msys2…
mingw64:github.com/niXman/ming…
将mingw64解压到msys2的根目录
下载cmake:github.com/Kitware/CMa…
将cmake解压到D盘
用mingw64进入libxml2目录,执行下面语句
pacman -S liblzma-devel zlib-devel
"D:\cmake-3.26.3-windows-x86_64\bin\cmake" ./ -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
make
3. ohos 编译
用mingw64进入libxml2目录,执行下面语句
xx/xx/native 为ohos编译工具链目录
var=`awk '/set_target_properties.*/{print NR;exit;}' CMakeLists.txt` && sed -i ''"$var"',+10{/VERSION/d}' CMakeLists.txt
mkdir build
cd build
cmake .. -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="xx/xx/native/llvm/bin/clang.exe" -DCMAKE_C_FLAGS="--sysroot=xx/xx/native/sysroot --target=aarch64-linux-ohos" -DCMAKE_SYSTEM_NAME=linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -G "MinGW Makefiles" -DCMAKE_STRIP="xx/xx/native/llvm/bin/llvm-strip.exe" -DCMAKE_MAKE_PROGRAM="xx/msys2/mingw64/bin/make.exe" -D LIBXML2_WITH_ICONV=OFF -D LIBXML2_WITH_LZMA=OFF -D LIBXML2_WITH_PYTHON=OFF -D LIBXML2_WITH_ZLIB=OFF
make
xml4cj编译
- linux x86_64 编译
将上面生成文件 libxml2.so,放入根目录的 lib 文件夹下,之后执行
./build_linux.sh
2. windows 编译
将上面生成文件 libxml2.dll,放入根目录的 lib 文件夹下,之后执行
build_windows.bat
3. aarch64编译
将上面生成文件 libxml2.so,放入根目录的 lib 文件夹下,之后执行
./build_aarch64.sh
4. ohos编译
将上面生成文件 libxml2.so,放入根目录的 lib 文件夹下,之后执行
./build_ohos.sh
功能示例
Xml DOM 解析模式功能示例
import xml4cj.*
main() {
let x: XmlParser = XmlParser()
var ret = x.parse("<myxml>Some data </myxml>")
match (ret) {
case Some(root) => println(root.name)
case None => println("XML Parse error.")
}
return 0
}
执行结果如下:
myxml
DD一下:欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。
`欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案)
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
Xml SAX 解析模式功能示例
import xml4cj.*
import std.collection.*
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>
"""
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() {
var handler = MovieHandler()
let x: XmlParser = XmlParser(handler)
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: 2024-4
End Parsing.