2015-05-10 61 views
1

我想解析Java中的XML文件,它工作得很好,但我並沒有真正得到爲什麼。我有以下代碼(我只是剪斷重要的事情):在Java中處理XML文件,節點混亂

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 

Document document = builder.parse(new File(fileName)); 

NodeList nodeList = document.getDocumentElement().getChildNodes(); 

for (int i = 0; i < nodeList.getLength(); i++) 
    { 
    Node node = nodeList.item(i); 

    if (node.getNodeType() == Node.ELEMENT_NODE) { 
    Element elem = (Element) node; 

    // Get the value of all sub-elements. 
    String original = elem.getElementsByTagName("Original") 
     .item(0).getChildNodes().item(0).getNodeValue(); 

    String translation = elem.getElementsByTagName("Translation").item(0) 
     .getChildNodes().item(0).getNodeValue(); 

    Integer score = Integer.parseInt(elem.getElementsByTagName("Score") 
     .item(0).getChildNodes().item(0).getNodeValue()); 
} 

我的XML是簡單的:

<?xml version="1.0" encoding="UTF-8"?> 
    <Dictionary> 
     <Word> 
       <Original>die Unterwäsche</Original > 
       <Translation>Bielizna</Translation> 
       <Score>-4</Score> 
     </Word> 
     <Word> 
       <Original>die Müche</Original> 
       <Translation>Fatyga, trud</Translation> 
       <Score>0</Score> 
     </Word> 
     <Word> 
       <Original>wetten</Original> 
       <Translation>założyć się</Translation> 
       <Score>-6</Score> 
     </Word> 
     <Word> 
       <Original>umsonst</Original> 
       <Translation>Bez powodu</Translation> 
       <Score>0</Score> 
     </Word> 
    </Dictionary> 

大問題是:爲什麼我有9個節點調用nodeList.getLength時()?我打印它們,4個是元素(看起來很好),另外5個是文本節點,但我並沒有真正瞭解它們。爲什麼Node在Element上播放?

第二件事是這一部分:

elem.getElementsByTagName("Score") 
     .item(0).getChildNodes().item(0).getNodeValue()); 

我打電話項目(0)到的節點上,但同樣,它是什麼實際?

我真的很感激你的幫助,我很初學,現在我一直在努力。發佈分步指南我的XML部分列出的內容對我來說意味着一個世界。

+0

是什麼'builder',什麼是'document'? – ThisClark

+0

我加了相關的行,對不起。 – KrwawyKefir

回答

1

爲什麼我在調用nodeList.getLength()時有9個節點?

的9個節點是:

1的<文獻> <字>
<字之間的所有的4>

5其它的是文本節點,但我的
4真的不知道它們是什麼

<?xml version="1.0" encoding="UTF-8"?> 
<Dictionary>       <-- null text 
    <Word>       <-- null text 
     <Original>... 
     <Translation>... 
     <Score>... 
    </Word> 
    <Word>       <-- null text 
     <Original>... 
     <Translation>... 
     <Score>... 
    </Word> 
    <Word>       <-- null text 
     <Original>... 
     <Translation>... 
     <Score>... 
    </Word> 
    <Word>       <-- null text 
     <Original>... 
     <Translation>... 
     <Score>... 
    </Word> 
</Dictionary> 

爲什麼節點在Element上播放?

要回答這個問題最後一部分,我是指你另一個帖子:What's the difference between an element and a node in XML?

+0

感謝@ThisClark,現在已經很清楚了,我注意到,還有一件事是,不是使用這個: '(elem.getElementsByTagName(「Score」) .item(0).getChildNodes()。item(0)。 )我可以使用: '(elem.getElementsByTagName(「Score」) .item(0).getTextContent());)' 它可以工作。它還好嗎? – KrwawyKefir

+0

如果它適合您的需求,那絕對沒問題。如果您正在尋找更好的方式來使用XML,那麼您必須閱讀更多關於該主題的內容,並練習不同的方法,直到您更舒適。查看SAX和StAX中的實現。 – ThisClark