2012-02-10 26 views
0

XML解析的新手段。我需要讀取一組任意XML文件。他們都應該是POX,像以下格式:在Java中讀取和解析任意的xml結構?

<someThing> 
    <property1>blah blah blah</property1> 
    <property2>blah blah blah</property2> 
</someThing> 

或以下:

<thingList> 
    <items> 
    <otherThing> 
     <prop3>blah blah blah</prop3> 
     <prop4>blah blah blah</prop4> 
    </otherThing> 
    <otherThing> 
     <prop3>blah blah blah</prop3> 
     <prop4>blah blah blah</prop4> 
    </otherThing> 
    </items> 
</thingList> 

所以我不知道該元素的名稱預先。我的問題是,如果有任何Java庫在XML中處理讀取,而不是通過節點的名稱或節點的屬性,而是通過結構?

+3

你是什麼意思的結構?你有沒有試過SAX或DOM? – Adrian 2012-02-10 06:09:26

回答

1

使用getRootElement方法可以獲取xml文件的根元素。獲取根元素後,必須指定要獲取的元素的xml路徑。我已經使用這個爲「items/otherThing/prop3」寫了,你會得到你的prop3標籤值。

File fXmlFile = new File("test.xml"); 
    SAXBuilder builder = new SAXBuilder(); 
    Document document = builder.build(fXmlFile); 
    Element beans = document.getRootElement(); 

    Element dbUrlElementHost = (Element) XPath.selectSingleNode(beans,"items/otherThing/prop3"); 
    dbUrlElementUsername.getValue()+""; 
+0

這是最健壯的答案。謝謝。 – Slamice 2012-02-11 17:03:47

0

我認爲DOM是最好的選擇,如果你想要通過節點。您可以遍歷每個節點,它是子節點的列表。這是好的example得到一個想法。

0

您可以使用getChildNodes()來獲取整個節點列表,以visitNode()這樣的方法遞歸地調用它。該API可在org.w3c.dom包中找到。

首先調用文檔的根節點的getChildNodes()通過我提到然後visitNode()內再次調用visitNode()每個在當前節點的子節點的visitNode()方法。

您可以通過getNodeType()檢查類型,如果它是Node.TEXT_NODE訪問getNodeValue()以獲取該標記的值。