因JMeter XML结果文件可能会比较大,所以使用SAXParser解析,而不使用DOM。
SAXParser
是什么?
- 它是 Java 提供的一个 SAX(Simple API for XML)解析器。
- SAX 是一种 事件驱动的 XML 解析方式,不像 DOM 那样一次性把整个 XML 载入内存。
- 它适合处理大文件,性能好,但需要你自己写逻辑处理标签和内容。
入口:parse(inputSource, this)
这行代码会逐行读取 XML 文件内容,并根据遇到的 XML 标签,自动回调 startElement()
、endElement()
、characters()
等方法,从而实现解析。
参数 | 含义 |
---|---|
inputSource | 要解析的 XML 输入源(比如一个文件流) |
this | 当前类本身是一个 DefaultHandler (即监听器),用于接收解析过程中发生的事件 |
方法名 | 触发时机 | 示例 |
---|---|---|
startElement() | 每次遇到一个新标签开始时调用 | <sample> 出现时被调用 |
characters() | 在标签之间的文本内容出现时调用 | <label>登录</label> 中的“登录”会触发它 |
endElement() | 每次遇到一个标签结束时调用 | </sample> 出现时被调用 |
实际流程举例
假设你有如下 XML 内容:
<sample lb="登录" s="false">
<responseData>响应内容</responseData>
</sample>
当你运行:
saxParser.parse(inputSource, this);
解析器会按以下顺序调用你的方法:
startElement("sample", attributes)
- 读到
<sample lb="登录" s="false">
,触发一次
- 读到
startElement("responseData")
- 读到
<responseData>
- 读到
characters("响应内容")
- 读到标签之间的文本内容
endElement("responseData")
- 读到
</responseData>
- 读到
endElement("sample")
- 读到
</sample>
- 读到
这样,你就知道当前正在处理哪个标签,里面有什么内容。
小贴士
- 如果你希望只提取某些特定标签的内容,可以在
startElement()
中记录当前标签名,在characters()
中判断是否是你关注的标签。 - SAX 是单向的、只读的,不能修改 XML 内容。
- 如果你需要更直观地操作 XML 结构,可以考虑使用 DOM 或 JAXB。