Java-объект из сложного XML, интересующий только дочерний элемент - PullRequest
0 голосов
/ 22 декабря 2018

Это мой XML-файл:

<Root>
    <Id>1</Id>
    <Title>My title</Title>
    <More>
        <Extension>Ex</Extension>
        <Extra>Extra info</Extra>
            <Comments>
                <Comment date="2018-11-26T06:00:00+02:00">Hey, this is my comment</Comment>
                <Comment date="2017-11-26T06:00:00+02:00">Hey, this is my comment</Comment>
                <Comment date="2016-11-26T06:00:00+02:00">Hey, this is my comment</Comment>
                <Comment date="2011-11-26T06:00:00+02:00">Hey, this is my comment</Comment>
            </Comments>
    </More>
</Root>

Меня интересуют только данные <Comment>.Мой текущий подход заключается в использовании демонтажа JaxB и наличии классов Root.java, More.java, Comments.java, который содержит класс Comment.java.Так что это немного грязно.

У меня нет проблем с этим, но я хотел бы знать, есть ли какой-нибудь метод, который позволил бы вам перейти прямо к данным <Comment> и иметь только 1 класс Comment.javaдля этого?

1 Ответ

0 голосов
/ 22 декабря 2018

Если вы хотите получить все теги comment из XML-файла, вы можете попробовать следующий подход:

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class ReadComments {

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { 
        File xml = new File("D:/data.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(xml);
        doc.getDocumentElement().normalize();
        NodeList nodeList = doc.getElementsByTagName("Comment");

        for (int i= 0; i< nodeList.getLength(); i++) {
            Node node = nodeList.item(i);

            if (node.getNodeType() == Node.ELEMENT_NODE) {
                Element element = (Element) node;
                System.out.printf("Comment : %s | Date : %s\n", node.getTextContent(), element.getAttribute("date"));
            }
        }
    }
}

Вывод:

Comment : Hey, this is my comment | Date : 2018-11-26T06:00:00+02:00
Comment : Hey, this is my comment | Date : 2017-11-26T06:00:00+02:00
Comment : Hey, this is my comment | Date : 2016-11-26T06:00:00+02:00
Comment : Hey, this is my comment | Date : 2011-11-26T06:00:00+02:00

Обратите внимание, что это всего лишь пример, объясняющий получение подробной информации о конкретных тегах, вам придется изменить этот код в соответствии с вашими потребностями.

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