2013-02-07 57 views
2

我有一個簡單的XML,並且我想獲取這些屬性。網絡上有幾個例子,但我仍然不明白爲什麼只有4時才能得到17。我甚至嘗試計算我認爲文本可能存在的位置,但仍然沒有得到那個數字,除非是長度的輸出。這導致我不知道如何獲取所有Tag3的屬性名稱。獲取太多子節點並且無法獲取屬性

<?xml version="1.0" encoding="UTF-8"?> 
<tag1 xmlns="something"> 
    <xxxxxx-Set> 
     <tag3 Name="a"/> 
     <tag3 Name="b"/> 
     <tag3 Name="c"/> 
     <tag3 Name="d"/> 
    </xxxxxx-Set> 
    <tagB> 
     <tag3 Name="a"/> 
     <tag3 Name="b"/> 
     <tag3 Name="c"/> 
     <tag3 Name="d"/> 
    </tagB> 
</tag1> 

這是我的Java代碼:

import java.io.File; 
import java.util.Arrays; 
import java.util.List; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 


public class ParseXML { 


    public static void main(String[] args) { 
     try { 

      File test= new File("test.xml"); 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(test); 

      NodeList tagAs= doc.getElementsByTagName("xxxxxx-Set").item(0).getChildNodes(); //should be all the tag3 elements? 

      for(int i = 0; i < tagAs.getLength(); i++) { 
       System.out.println(tagAs); 
       System.out.println(i); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

注意:添加.getAttributes()getNamedItem( 「名稱」)getNodeValue()來打印語句給我空例外。 和輸出是:

[xxxxxx-Set: null] 
0 
[xxxxxx-Set: null] 
1 
... 
[xxxxxx-Set: null] 
16 
+0

爲什麼在你的xml中有這麼多的「」? – Burkhard

+1

將'System.out.println(tagAs);'替換爲'System.out.println(tagAs.item(i).getNodeName());'並且在Xml中找出一些有趣的節點。 – user1516873

+0

對不起,這些額外的是一個錯誤。或之前的額外項目。我已經看到了關於文本元素,我想它會在這裏裏面。有沒有辦法解決這個問題,或者只是打印一些奇怪的東西? – Juan

回答

3

如果你想利用你的所有Name屬性(這是更好地與更低的情況下他們的名字),請使用下一個方法:

Element xSet = (Element) doc.getElementsByTagName("xxxxxx-Set").item(0); 
NodeList xSetTags = xSet.getElementsByTagName("tag3"); 

for(int i = 0; i < xSetTags.getLength(); i++) { 
    Element tag3 = (Element) xSetTags.item(i); 
    System.out.println(tag3.getAttribute("Name")); 
} 

我用org.w3c.dom.Element類它使。與org.w3c.dom.Node一起工作並不是最好的主意,因爲這個類不僅表示XML元素,還表示屬性,註釋等。查看文檔以獲得NodeElement類之間的差異。