gpt4 book ai didi

java - 如何使用 DOM/SAX 或 java 中的任何解析器解析 bcompare xml 报告

转载 作者:行者123 更新时间:2023-12-02 12:00:04 26 4
gpt4 key购买 nike

在我们的项目中,我们希望从 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 解析器的示例代码,here it is

我已经给了你领导权,但我不会做你的工作。抱歉。

编辑2:

使用 SAX 解析器非常简单。查看上面的文档和示例。

将使用 sax 解析器解析 XML 视为 switch/case 语句。当当前标签是某事时,执行您需要执行的操作,当执行其他操作时,执行所需执行的操作等。您可能还需要保留上下文。

switch(tag){

foldercomp:
ops
filecomp:
ops
rt:
ops
lt:
ops

}

你自己尝试一下就知道了。如果你在实现它时遇到困难,其他 stackoverflow 用户,包括我自己,将很乐意提供帮助。但你需要先尝试一下。

干杯。

关于java - 如何使用 DOM/SAX 或 java 中的任何解析器解析 bcompare xml 报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47333453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com