[英]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.