在我们的项目中,我们想要从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标签
答案 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用户,包括我自己将很乐意提供帮助。但你需要先尝试。
干杯。