2015-03-20 2 views
1

Я хочу прочитать такой файл:Чтение XML с помощью SAXParser

<level1 a="1" b="2" c="3"> 
    <level2 a2="1" b2="2" c2="3"> 
    <level3 a3="1" b3="2" c3="3"> 
     <level4 a4="1" b4="2" c4="3"> 
    </level3> 
    </level2> 
    <level2a a2a="1" b2a="2" c2a="3"> 
    <level3a> 
     <level3 id="0"/> 
     <level3 id="2"/> 
     <level3 id="7"/> 
     <level3 id="11"/> 
    </level3a> 
    </level2a> 
</level1>  

Примечание:level3 фактически используется дважды в разных контекстах

У меня есть некоторый псевдокод перепутали где хотите использовать SAXParser в Java:

create new parser 
loop to get tags 
if tag is level 1 
get its properties(a b and c) 
save the values of them into level1_a,level1_b,level1_c 
if tag is level 2 
... 
if .. 
... 
end loop 
done 

Но я никогда не использовал его, и я не ясно, на, как это работает, вы можете помочь меня?

ответ

1

Используя синтаксический анализ SAX, вам нужно будет обрабатывать контекст на вашей стороне. Вы делаете здесь, чтобы различать level3 узел, когда он ниже level2 или ниже level3a. Лучший способ для обработки стеки при декодировании, что является текущим узлом вы находитесь в: (? Названии)

  • нажимного узла (? Имя) в стеке после StartElement
  • поп верхнего узла после того, как endElement.

В вашем псевдокоде ваш «цикл для получения тегов» на самом деле является обратным вызовом SAX, который вы регистрируете в SAXParser. Каждый раз, когда вы его запускаете, вы также можете нажимать имя узла в стек. Затем, читая узел level3, вам просто нужно прочитать имя узла верхнего стека, чтобы узнать, нужно ли читать id или триплет a3b3c3 атрибутов в текущем узле.

+0

отличная идея, пытаясь реализовать – RE60K

Смежные вопросы