Чтение комментариев XML

Я пытаюсь использовать XML-файл планировщика задач Windows. Для тех, кто не знает, XML-файл выглядит так:

  <?xml version="1.0" encoding="UTF-16"?>
<Tasks>
    <!-- \job1 -->
    <Task version="1.2"
        xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
        <RegistrationInfo>
            <Date>2013-08-03T13:07:36.8791439</Date>
            <Author>pc\laptop</Author>
        </RegistrationInfo>
    ... 
        <!-- \job2 -->
         <Task version="1.2"
         ......

Мне нужно присвоить значение "job1" для массива. Для этого я сделал этот код Java:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setIgnoringComments(false);
NodeList jobList = el.getElementsByTagName("Tasks");
    NodeList ndList = el.getElementsByTagName("Task");

    for (int i = 0; i < ndList.getLength(); i++) {
        Node childNode2 = jobList.item(i);
        Node childNode = ndList.item(i);
        if (childNode2.getNodeType() == Node.COMMENT_NODE) {

            //Element jElement = (Element) childNode2;
            //jElement.toString();
            System.out.println(childNode2.getNodeType());
              }
             if (childNode.getNodeType() == Node.ELEMENT_NODE) {
            Element eElement = (Element) childNode;
        System.out.println("Date : " + getTagValue("Date", eElement));
        //some other codes....
        }

Но я не могу добраться до этой области комментариев. Во-вторых, как я могу ходить в области комментариев. Как мне написать цикл для например?

2 ответа

Вам не хватает комментариев, потому что вы используете getElementsByTagName() которые возвращают NodeList каждый из Element тип.

использование getChildNodes() на Document вместо этого, которые возвращают список узлов любого подчиненного интерфейса Node, в том числе Comment

Это должно работать

    NodeList list1 = doc.getDocumentElement().getChildNodes();
    for (int i = 0; i < list1.getLength(); i++) {
        Node n1 = list1.item(i);
        if (n1.getNodeType() == Node.COMMENT_NODE) {
            String comment = n1.getNodeValue();
        } else if (n1.getNodeType() == Node.ELEMENT_NODE) {
            // Task
            NodeList list2 = n1.getChildNodes();
            for (int j = 0; j < list2.getLength(); j++) {
                Node n2 = list2.item(j);
                if (n2.getNodeType() == Node.ELEMENT_NODE) {
                    // RegistrationInfo 
                    NodeList list3 = n2.getChildNodes();
                    for (int k = 0; k < list3.getLength(); k++) {
                        Node n3 = list3.item(k);
                        if (n3.getNodeType() == Node.ELEMENT_NODE) {
                            if (n2.getNodeName().equals("Date")) {
                                ...
Другие вопросы по тегам