2013-02-08 76 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(); 
    }