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

时间:2017-11-16 15:28:27

标签: java xml parsing xsd beyondcompare

在我们的项目中,我们想要从xml生成excel报告,该报告包含两个文件夹的所有差异。

我试图从xml节点获取文件的完整路径,但我对节点名称感到困惑,因为所有父节点(foldercomp)都有相同的名称。

并且可以为此xml格式创建xsd,具有相同类名的内部类在xsd复杂类型中不接受。

你能帮帮我吗

以下是bcompare xml报告:

=rtrim(First(Fields!FRSTNAME.Value,"EmployeeInfo")) & " " & 
rtrim(First(Fields!MIDLNAME.Value, "EmployeeInfo")) & " " &
rtrim(First(Fields!LASTNAME.Value, "EmployeeInfo")) & " " &
IIF((Fields!Lifeamount.Value, "EmployeeInfo")> 100000.00, 100000.00, (Fields!Lifeamount.value, "EmployeeInfo"))

lt - 文件夹和文件中差异的CODE1,rt- CODE2,foldercomp和filecomp标签

1 个答案:

答案 0 :(得分:1)

XML输出对我有意义。我从中理解的是:

Dir1
 |
 +-- Dir3
 |    |
 |    +Dir4
 |      |
 |      +File5
(etc)

文件夹可能包含更多文件夹,文件夹可能包含许多文件。对于每个比较,都有左右项。所以,你需要做的是重新思考你的解析策略。每个foldercomp至少有2个(可能更多)子项,每个filecomp标记都有两个(或更多)子项。

如果我是你,我会使用foldercomp和filecomp open标签将行和列值递增1,关闭标记以递减列,同时以类似的方式将行递增1。而lt和rt打开标签来增加行值(而不是列)并忽略相同的close标签。我会以粗体打印文件夹和文件名,并保持正常的差异。

filecomp上的状态可让您了解差异的本质。因此,如果它是rtnew,则意味着,它被添加。我会用绿色等。

通过sax解析器实现它应该太难了。

我希望这是有道理的。

编辑:

如果您需要SAX解析器的示例代码,here it is

我已经给你带头但我不会做你的工作。遗憾。

EDIT2:

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

考虑使用sax解析器解析XML作为switch / case语句。当前标签是某种东西时,做你需要做的事情,做别的事情,做任何需要的事情等等。你可能也需要保持上下文。

switch(tag){

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

}

亲自试试看。如果你通过实现它遇到困境,其他stackoverflow用户,包括我自己将很乐意提供帮助。但你需要先尝试。

干杯。