Как я могу перечислить определенные атрибуты из файла XML - PullRequest
1 голос
/ 12 октября 2011

У меня есть 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 были перечислены одна за другой в формате ниже с использованием текстовых представлений, обратите внимание, я не хочу, чтобы nick1 и nick2 были включены.Я часами читаю и тестирую с arraylist и не могу получить результат, который ищу.Вот как я хочу, чтобы все узлы c в xml были перечислены каждый в текстовом представлении.

Дата: 20110706 - Время: 1:20 - HisName: john - HerName: jen

Дата: 20110806 - Время: 2:20 - HisName: Стивен - HerName: Джудит

Также возможно ли иметь просмотр изображений рядом с каждым именем в строке?

Заранее спасибоза любую помощь, которую вы можете оказать, я пытался делать это часами, но, к счастью, это сводило меня с ума!

РЕДАКТИРОВАТЬ: просто "// a / bb / c" я получаю первую строкуXML с информацией, которую я хочу, но как перейти к следующей строке и так далее?

1 Ответ

1 голос
/ 18 октября 2011

Укажите 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, нодругие должны быть очевидны из этого примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...