1

我正在尝试使用 Windows 的任务调度程序 xml 文件。对于不知道的人,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....
        }

但我无法到达那个评论区。第二件事是我怎样才能走进评论区。例如,我如何编写一个 for 循环?

4

2 回答 2

2

您缺少注释,因为您使用的getElementsByTagName()是返回NodeList每个Element类型的。

使用getChildNodes()onDocument代替,它返回 的任何子接口的节点列表Node,包括Comment

于 2013-08-12T12:16:00.443 回答
0

这应该工作

    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")) {
                                ...
于 2013-08-12T12:29:11.920 回答