[英]How to parse the bcompare xml report using DOM/SAX or any parser in java
在我们的项目中,我们希望从xml生成具有两个文件夹所有不同之处的excel报告。
我试图从xml节点获取文件的完整路径,但是由于所有父节点(foldercomp)都具有相同的名称,所以我与节点名称混淆。
并且可以为此xml格式创建xsd,在xsd复杂类型中不接受具有相同类名的内部类。
你能帮我吗
以下是bcompare xml报告:
<?xml version="1.0" encoding="utf-8"?>
<bcreport created="16-11-2017 20:20:54">
<foldercomp>
<ltpath>E:\compare\CODE1</ltpath>
<rtpath>E:\compare\CODE2</rtpath>
<mode>Differences</mode>
<foldercomp>
<lt>
<name>Dir1</name>
<size>696</size>
</lt>
<rt>
<name>Dir1</name>
<size>846</size>
</rt>
<foldercomp>
<lt>
<name>Dir3</name>
<size>424</size>
</lt>
<rt>
<name>Dir3</name>
<size>431</size>
</rt>
<foldercomp>
<lt>
<name>Dir4</name>
<size>281</size>
</lt>
<rt>
<name>Dir4</name> <!-- E:\compare\CODE2\Dir1\Dir3\Dir4 -->
<size>288</size>
</rt>
<filecomp status="rtnewer">
<lt>
<name>File5 (2).txt</name> <!-- E:\compare\CODE1\Dir1\Dir3\Dir4\File5 (2).txt -->
<size>139</size>
</lt>
<rt>
<name>File5 (2).txt</name> <!-- E:\compare\CODE2\Dir1\Dir3\Dir4\File5 (2).txt -->
<size>146</size>
</rt>
</filecomp>
</foldercomp>
</foldercomp>
<filecomp status="rtonly">
<rt>
<name>File1 (1).txt</name> <!-- E:\compare\CODE2\File1 (1).txt -->
<size>143</size>
</rt>
</filecomp>
</foldercomp>
<foldercomp>
<lt>
<name>Dir2</name>
<size>286</size>
</lt>
<rt>
<name>Dir2</name>
<size>296</size>
</rt>
<filecomp status="rtnewer">
<lt>
<name>File2.txt</name> <!-- E:\compare\CODE1\Dir2\File2.txt -->
<size>143</size>
</lt>
<rt>
<name>File2.txt</name> <!-- E:\compare\CODE2\Dir2\File2.txt -->
<size>153</size>
</rt>
</filecomp>
</foldercomp>
<filecomp status="rtnewer">
<lt>
<name>File1 (2).txt</name> <!-- E:\compare\CODE1\File1 (2).txt -->
<size>132</size>
</lt>
<rt>
<name>File1 (2).txt</name> <!-- -E:\compare\CODE1\File1 (2).txt -->
<size>139</size>
</rt>
</filecomp>
<filecomp status="rtnewer">
<lt>
<name>File1 (3).txt</name> <!-- E:\compare\CODE1\File1 (3).txt -->
<size>144</size>
</lt>
<rt>
<name>File1 (3).txt</name> <!-- E:\compare\CODE2\File1 (3).txt -->
<size>150</size>
</rt>
</filecomp>
</foldercomp>
lt-CODE1,rt- CODE2,foldercomp和filecomp标记,用于文件夹和文件中的差异
XML输出对我来说很有意义。 我从中了解到的是:
Dir1
|
+-- Dir3
| |
| +Dir4
| |
| +File5
(etc)
一个文件夹可能有更多文件夹,一个文件夹可能有很多文件。 对于每个比较,都有左项和右项。 因此,您需要做的是重新考虑您的解析策略。 每个foldercomp至少有2个(可能更多)子级,每个filecomp标记有两个(或更多)子级。
如果您是我,我将使用foldercomp和filecomp打开标记将行和列的值增加1,关闭标记以使列减少,同时以类似的方式将行增加1。 lt和rt打开标记可增加行值(而非列),而忽略相同的关闭标记。 我将以粗体显示文件夹和文件名,并保留正常的差异。
filecomp上的状态可让您了解差异的性质。 因此,如果它是rtnew,则表示已添加。 我会用绿色等。
通过sax解析器实现它应该太困难了。
我希望这是有道理的。
编辑:
如果您需要SAX解析器的示例代码, 则为 。
我已经带头了,但是我不会做你的工作。 抱歉。
EDIT2:
使用SAX解析器非常简单。 查看上面的文档和示例。
考虑使用sax解析器解析XML是作为switch / case语句。 当当前标记是某件事时,请执行所需的操作,在其他事情时,请执行所需的操作等。您可能还需要保留上下文。
switch(tag){
foldercomp:
ops
filecomp:
ops
rt:
ops
lt:
ops
}
自己尝试看看。 如果您通过实施它遇到麻烦,那么包括我自己在内的其他stackoverflow用户将很乐意为您提供帮助。 但是您需要先尝试。
干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.