【问题标题】:How can I list specific attributes from xml file如何从 xml 文件中列出特定属性
【发布时间】:2011-10-12 16:31:53
【问题描述】:

我有一个看起来像这样的 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 - 他的名字:steven - 她的名字:judith

还有可能在每行的每个名称旁边都有一个图像视图吗?

提前感谢您提供的任何帮助,我已经尝试了几个小时,但没有成功,这让我发疯了!

编辑:只需执行“//a/bb/c”即可获得包含所需信息的 xml 的第一行,但如何继续执行下一行,等等?

【问题讨论】:

  • 只做“//a/bb/c”我得到了我想要的第一行信息,但是我该如何继续下一行,等等?

标签: java android xml xpath


【解决方案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 属性的输出,但其他的应该从这个例子中显而易见。

【讨论】:

  • 非常感谢您的帮助,我最终使用了 dom 和 nodelist,因为我能够找到一个可以使用的示例。使用 xpath 而不是 dom 是否有好处,反之亦然?
  • 有没有一种简单的方法可以将我的第一种搜索“名称”的方法和您的方法结合起来,以便我可以在列表中搜索名称并将其显示在节点列表和所有其他名称的顶部在它下面?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
相关资源
最近更新 更多