2011-10-12 58 views
1

我有一個XML文件,它看起來像這樣如何列出從XML文件中的特定屬性

<a> 
<bb> 
<c date="20110706" time="1:20" name1="john" name2="jen" nick1="johnny" nick2="jenny" /> 
<c date="20110806" time="2:20" name1="steven" name2="judith" nick1="steve" nick2="judy" /> 
</bb> 
</a> 

目前,我有它設置抓取的屬性值,並將它們設置爲基於一個屬性的值的字符串。使用此代碼

try { 
    String name1 = mName1; 

    XPath xpath = XPathFactory.newInstance().newXPath(); 
    String expr = String.format("//a/bb/c[@* = '%s']", name1); 
    Node c = null; 
    try { 
     c = (Node) xpath.evaluate(expr, xml, XPathConstants.NODE); 
    } catch (XPathExpressionException e) { 
     e.printStackTrace(); 
    } 

我試圖做到的是擁有所有的C行列出的一個,另一個在下面使用textviews格式後,發現我不希望nick1和nick2包括在內。我一直在用arraylist閱讀和測試幾個小時,不能得到我期待的結果。這就是我希望xml中的所有c節點都可以在textview中列出的每個節點。

日期:20110706 - 時間:1:20 - HisName:約翰 - HerName:仁

日期:20110806 - 時間:2:20 - HisName:史蒂芬 - HerName:朱

也會將它每行每個名稱旁邊都可以有一個imageview?

預先感謝您提供的任何幫助,我一直試圖做幾個小時,但沒有運氣,這讓我瘋狂!

編輯:通過只做「/ a/bb/c」我得到了我想要的信息與XML的第一行,但我如何移動到下一行,等等?

+0

通過只做「// a/bb/c」我得到了我想要的第一行信息,但是如何繼續下一步,依此類推? – IceSteve

回答

1

指定XPathConstants.NODESETreturnType作爲第二個參數evaluate和迭代結果:

final XPath xpath = XPathFactory.newInstance().newXPath(); 
final XPathExpression expr = xpath.compile("//a/bb/c"); 
final NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 
for (int i = 0; i < nodes.getLength(); i++) { 
    final NamedNodeMap attrs = nodes.item(i).getAttributes(); 
    final Node dateNode = attrs.getNamedItem("date"); 
    System.out.println(dateNode.getNodeName() + ":" + dateNode.getNodeValue()); 
} 

我已經證明了只有date屬性的輸出,但其他人應該明顯從這個例子。

+0

非常感謝您的幫助,我最終使用了dom和nodelist,因爲我能找到一個可以使用的示例。使用xpath與dom相比有沒有好處,反之亦然? – IceSteve

+0

是否有一種簡單的方法可以將我的第一種搜索「名稱」的方法與您的搜索結合起來,這樣我就可以搜索列表中的名稱並將其顯示在節點列表的頂部以及其下的所有其他列表中? – IceSteve