如何列出xml文件中的特定属性

时间:2011-10-12 16:31:53

标签: java android xml xpath

我有一个看起来像这样的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();
    }

我想要完成的是使用textviews以下面的格式一个接一个地列出所有c行,注意我不希望包含nick1和nick2。我一直在阅读和测试arraylist几个小时,不能得到我想要的结果。这就是我希望xml中的所有c节点都在textview中列出的方式。

日期:20110706 - 时间:1:20 - HisName:john - HerName:jen

日期:20110806 - 时间:2:20 - HisName:steven - HerName:judith

还可以在每行的每个名称旁边都有一个imageview吗?

提前感谢您提供的任何帮助,我一直试图这样做几个小时而没有运气让我疯狂!

编辑:只做“// a / bb / c”我用我想要的信息获取xml的第一行,但是如何移动到下一行,依此类推?

1 个答案:

答案 0 :(得分:1)

指定returnType XPathConstants.NODESET作为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属性的输出,但其他一些应该从这个示例中显而易见。