2013-02-08 78 views
0
<rootNode> 
    <Movies> 
    <Movie id=1> 
     <title> title1</title> 
     <Actors> 
      <Actor>Actor1</Actor> 
      <Actor>Actor2</Actor> 
     <Actors> 
    </Movie> 
    </Movies> 
    <performers > 
     <performer id=100> 
      <name>name1</name> 
      <movie idref=1/> 
     </performer> 
    </performers> 
</rootNode> 

問題1:我只想獲得電影下的電影。我嘗試了DOM和SAX。它也返回表現不佳的人。我如何使用SAX或DOM避免這種從SAX或Dom中的XML元素中讀取元素

DOM: 
doc.getElementsByTagName("movie"); 
SAX: 
public void startElement(String uri, String localName,String qName, 
       Attributes attributes) throws SAXException { 

     if (qName.equalsIgnoreCase("movie")) 

問題2:如何使用DOM和SAX進去元素的元素(在電影演員)?

基本上,我想要做的是按順序輸出數據。

1,title, Actor1,Actor2 
100,name1,1 
+0

它看起來不像一個有效的XML。 – SparKot 2013-02-08 19:12:51

+0

我的原始XML文件非常大,所以我編寫了類似的XMl。我編輯它。 – Michael 2013-02-08 20:40:53

+0

Java爲此支持XPath:http://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/package-summary.html – millimoose 2013-02-08 22:45:50

回答

0

XPath是專爲這種類型的提取。對於您的示例文件,查詢將如下所示。爲了簡單起見,我假定你的xml是在res/raw中,但實際上你需要從你得到你的xml的地方創建InputSource

XPath xpath = XPathFactory.newInstance().newXPath(); 
    String expression = "/rootNode/Movies/Movie"; 
    try { 
     NodeList nodes = (NodeList) xpath.evaluate(expression, doc,XPathConstants.NODESET); 
    } catch (XPathExpressionException e) { 
     e.printStackTrace(); 
    }