2013-08-12 5 views
1

Я пытаюсь использовать XML-файл планировщика задач 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, например?

+0

Вы пробовали 'jElement.getTextContent()' вместо ' jElement.toString() '? – gogognome

+0

Нет, не пробовал, потому что это не происходит, если оператор – ekrem777

ответ

2

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

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

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")) { 
           ... 
+0

Когда я говорю 'NodeList list1 = doc.getDocumentElement(). GetChildNodes();' он возвращает null, поэтому в нем нет узла. – ekrem777