2017-06-14 89 views
0

我有以下xml文件。如何在java中獲取xml文件的子部分

<?xml version="1.0" encoding="UTF-8"?> 
<school> 
    <student> 
     <firstname name="ankush"> 
      <test>sample </test> //......here can be more sub nodes 

     </firstname> 
     <lastname>thakur</lastname> 
     <email>beingjavaguy.gmail.com</email> 
     <phone>7678767656</phone> 
     <address> 
      <houseNo> </houseNo> 
      <street> </street> 
      <city> </city> 
      <pincode> </pincode> 
     </address> 
    </student> 
</school> 

從上面的xml文件我想要得到的節點串像下面

<address> 
     <houseNo> </houseNo> 
     <street> </street> 
     <city> </city> 
     <pincode> </pincode> 
    </address> 

上述地址XML節點將被轉換爲JSON在我的應用程序中使用。

我試過DOM,SAX解析器,但它們只會用於逐節點獲取每個節點而不是xml文件的一部分。

由於我的xml文件有些大,我更喜歡使用XMLStreamReader。

任何機構可以告訴我,如何獲得的XML文件的一部分作爲一個字符串?

+0

你的意思是,你需要得到perticular父節點,並從大的XML文件,它的子節點???? –

+0

是的正確@KishanCS –

+0

請你可以澄清一下你認爲它很大(使提示解決方案更容易) – MartinByers

回答

0

用jsoup試一試。例如:

import java.io.File; 
import java.io.IOException; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
// add 
import org.jsoup.select.Elements; 


public class JsoupTest { 

    public static void main(String [] args) throws IOException{     
     File input = new File("C:\\Users\\eritrean\\Desktop\\test.xml"); 
     Document doc = Jsoup.parse(input,"UTF-8"); 
     //select all address tags; returns a list of Elements 
     Elements addresses = doc.getElementsByTag("address"); 
     for(Element address : addresses){ 
      System.out.println(address); 
      System.out.println("------------"); 
     } 
    } 
} 
+0

你好@Eritrean,感謝您的答覆,在這裏我想獲得每個學生在xml文件中的地址欄。如何做循環? –

+0

我編輯了我的答案。首先通過它們的標籤名稱獲取所有「地址」元素,並在列表中循環。 – Eritrean

0

有很多工具可以用簡單的方式解析xml; JaxB,dom4j,jsoup ......僅舉幾例。他們都有優勢和弱點。

選擇使用哪種技術時需要考慮的重要事項是您現在實際需要什麼以及您可能需要多少靈活性。

因此,對於食物你,你需要訪問每個學生的地址(我假設你的XML文件可能包含多個學生)。

你只需要地址,還是需要更多? 你需要怎麼處理地址,你是否需要在特定的結構中進行處理? 在應用程序中是否有任何現有的xml處理? (我不喜歡引入兩個同樣的技術)

如果你只是想找到數據作爲字符串,然後Jsoup或Dom4j是完美的(如厄立特里亞寫的例子),但是,如果你需要你的數據更多的是面向對象的結構,那麼JaxB可能是有益的。

JaxB基本上將xml轉換爲指定的POJO結構(使用javax.xml.bind.annotation anotations進行了偏移),因此您的數據會自動很好地進行封裝。

你可以使用:

javax.xml.parsers.DocumentBuilder builder = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
org.w3c.dom.Document xmlDocument = builder.parse(new InputSource(new StringReader(documentXml))); 
org.w3c.dom.Node rootNode = xmlDocument.getFirstChild(); 
// then get by tag name 
+0

我們可以使用來自Java API的XMLInputFactory來做到這一點,因爲我很猶豫要再推出一個新的庫 –

+0

我喜歡不添加庫的方法,除非您需要它們。我從來沒有直接使用過XMLInputFactory,目前我沒有時間去調查它。 我會推薦使用JaxB,因爲我認爲這是一個非常好的解決方案或w3c實現(原生java) – MartinByers

+0

我已經添加了一個java的w3c實現的例子。 – MartinByers

相關問題