2011-12-19 69 views
0

我有一個XML文件開始:如何正確地通過使用Java的XML進行迭代?

<?xml version="1.0"?> 
<results> 
    <result id="0001"> 
     <hometeam> 
      <name>Dantooine Destroyers</name> 
      <score>6</score> 
     </hometeam> 
     <awayteam> 
      <name>Wayland Warriors</name> 
      <score>0</score> 
     </awayteam> 
    </result> 
    <result id="0002"> 
     <hometeam> 
      <name>Dantooine Destroyers</name> 
      <score>3</score> 
     </hometeam> 
     <awayteam>... 

,並在Java文件:

if(event.isStartElement()){ 
    if(event.asStartElement().getName().getLocalPart().equals(HOME)){ 
     System.out.println("In hometeam"); // for testing purposes 

     event = eventReader.nextEvent(); // I expect <name> element 

     if(event.isStartElement()){ // <------------ FALSE 
      if(event.asStartElement().getName().getLocalPart().equals(NAME)){.... 

我期望這個if語句爲<name>元素是真實的,但如果我堅持在System.out.println(event.isStartElement())我得到FALSE ....

event.getEventType()返回XMLEvent.CHARACTERS,我不明白...任何人都可以看到爲什麼?

如有必要,隨意對標籤/標題和問題進行編輯。

+2

難道你不能使用框架而不是編寫自己的解析器嗎?我會使用JAXB或XStream來自動生成Java對象。 – Kai 2011-12-19 13:26:41

+0

我的任務是編寫我自己的解析器 – Mead3000 2011-12-19 13:29:26

+0

我認爲他正在使用基於SAX的StAX(Streaming API for XML),因此是面向事件的代碼。 – jjmontes 2011-12-19 13:31:01

回答

1

字符意味着XML的下一部分是良好的字符(在你的情況下換行和縮進) - 低級別的解析器是不合格的放棄它們。它只提供原始事件。正確地處理結構是你的工作。

+0

只是因爲你是第一個 – Mead3000 2011-12-19 13:50:47

1

.nextEvent()調用可能會引入<hometeam><name>之間的空格。請注意,在XML中,標籤之間的所有字符數據(即使是空格或換行符)也可從API訪問。

您可以通過打印元素來測試。

您通常不會發現使用基於DOM的API的空白(或者您可以輕鬆忽略它),但是使用事件驅動的API(如SAX或StAX)則必須忽略它。

+0

謝謝你......但你遲到了我可以接受 – Mead3000 2011-12-19 13:51:09