我想解组大型 XML 文件的一部分。已经存在解决方案,但我想为我自己的实现改进它。
请看下面的代码:(来源)
public static void main(String[] args) throws Exception {
XMLInputFactory xif = XMLInputFactory.newFactory();
StreamSource xml = new StreamSource("input.xml");
XMLStreamReader xsr = xif.createXMLStreamReader(xml);
xsr.nextTag();
while(!xsr.getLocalName().equals("VersionList")&&xsr.getElementText().equals("1.81")) {
xsr.nextTag();
}
我想解组节点的 input.xml(如下所示): versionNumber="1.81"
使用当前代码,XMLStreamReader 将首先检查节点 versionNumber="1.80",然后检查 versionNumber 的所有子节点,然后再次移动到节点:versionNumber="1.81",它会满足退出条件while 循环。
因为,我只想检查节点版本号,迭代它的子节点是不必要的,对于大型 xml 文件,迭代 1.80 版本的所有子节点将花费很长时间。我只想检查根节点(versionNumber),如果第一个根节点(versionNumber=1.80)不匹配,XMLStreamReader 应该直接跳转到下一个根节点((versionNumber=1.81))。但是用 xsr.nextTag() 似乎无法实现。有没有办法只遍历所需的根节点?
输入.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<fileVersionListWrapper FileName="src.h">
<VersionList versionNumber="1.80">
<Reviewed>
<commentId>v1.80(c5)</commentId>
<author>Robin</author>
<lines>47</lines>
<lines>48</lines>
<lines>49</lines>
</Reviewed>
<Reviewed>
<commentId>v1.80(c6)</commentId>
<author>Sujan</author>
<lines>82</lines>
<lines>83</lines>
<lines>84</lines>
<lines>85</lines>
</Reviewed>
</VersionList>
<VersionList versionNumber="1.81">
<Reviewed>
<commentId>v1.81(c4)</commentId>
<author>Robin</author>
<lines>47</lines>
<lines>48</lines>
<lines>49</lines>
</Reviewed>
<Reviewed>
<commentId>v1.81(c5)</commentId>
<author>Sujan</author>
<lines>82</lines>
<lines>83</lines>
<lines>84</lines>
<lines>85</lines>
</Reviewed>
</VersionList>
</fileVersionListWrapper>