2014-09-12 2 views
0

Как разобрать следующий XML с помощью DOM парсера - name узла повторяется до н уровняКак проанализировать следующий xml с помощью DOM-анализатора?

<Services> 
    <service name ="qwerty" id=""> 
    <File rootProfile="abcd" extension="acd"> 
    <Columns> 
    <name id="0" profileName="DATE" type="java"></name> 
    <name id="1" profileName="DATE" type="java"></name> 
    . 
    . 
    . 
    <Columns> 
    </File> 
    <File rootProfile="efg" extension="ghi"> 
    <Columns> 
    <name id="a" profileName="DATE" type="java"></name> 
    <name id="b" profileName="DATE" type="java"></name> 
    . 
    . 
    . 
    <Columns> 
    </File> 
    </service> 
    </Services> 

Я использовал следующий код, чтобы получить значение:

public static void xmlEditor() throws SAXException, IOException { 
    try { 
     File xmlFile = new File("config/ServiceConfig.xml"); 
     DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder documentBuilder = null; 

     documentBuilder = documentFactory.newDocumentBuilder(); 

     org.w3c.dom.Document doc = documentBuilder.parse(xmlFile); 
     doc.getDocumentElement().normalize(); 
     NodeList nodeList0 = doc.getElementsByTagName("Service"); 
     NodeList nodeList1 = doc.getElementsByTagName("File"); 
     NodeList nodeList2 = doc.getElementsByTagName("name"); 
     System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 

     for (int temp0 = 0; temp0 < nodeList0.getLength(); temp0++) { 
      Node node0 = nodeList0.item(temp0); 

      System.out.println("\nElement type :" + node0.getNodeName()); 
      Element Service = (Element) node0; 

      if (node0.getNodeType() == Node.ELEMENT_NODE) { 
       System.out.println("-----------------" + temp0 + "----------------------------------"); 
       System.out.println("name : " + Service.getAttribute("name")); 
       System.out.println("id : " + Service.getAttribute("id")); 


       for (int temp = 0; temp < nodeList1.getLength(); temp++) { 
        Node node1 = nodeList1.item(temp); 

        System.out.println("\nElement type :" + node1.getNodeName()); 

        Element File = (Element) node1; 

        if (node1.getNodeType() == Node.ELEMENT_NODE) { 

         System.out.println("rootProfile:" + File.getAttribute("rootProfile")); 
         System.out.println("extension : " + File.getAttribute("extension")); 


         for (int temp1 = 0; temp1 < nodeList2.getLength(); temp1++) { 
          Node node2 = nodeList2.item(temp1); 

          System.out.println("\nElement type :" + node2.getNodeName()); 

          Element name = (Element) node2; 

          if (node2.getNodeType() == Node.ELEMENT_NODE) { 

           System.out.println("id:" + name.getAttribute("id")); 
           System.out.println("profileName : " + name.getAttribute("profileName")); 
           System.out.println("type : " + name.getAttribute("type")); 

          } 

         } 
        } 

       } 
      } 

     } 

    } 
} 

И я получаю первый уровень узла File сам получает весь валус name, включая следующий файл, который поможет избежать этого Выход am am is

name:----- 
id :----- 

rootProfile:-------- 
extension:----------- 

id:o 
profileName: 
type: 
id:1 
profileName: 
type: 
id:a 
profileName: 
type: 
id:b 
profileName: 
rootProfile:-------- 
extension:----------- 

id:o 
profileName: 
type: 
id:1 
profileName: 
type: 
id:a 
profileName: 
type: 
id:b 
profileName: 

ответ

1

Полный пример отправлен. вам может потребоваться прочитать XML из файла вместо String, который я использовал.

import java.io.ByteArrayInputStream; 
import java.io.IOException; 

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

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

public class MyTester { 

    public static void main(String[] args) throws IOException, SAXException, 
      ParserConfigurationException { 
     xmlEditor(); 
    } 

    public static void xmlEditor() throws SAXException, IOException, 
      ParserConfigurationException { 
     // File xmlFile = new File("ServiceConfig.xml"); 
     String xml = "<Services><service name=\"qwerty\" id=\"\"><File rootProfile=\"abcd\" extension=\"acd\"><Columns>" 
       + "<name id=\"0\" profileName=\"DATE\" type=\"java\"></name><name id=\"1\" profileName=\"DATE\" type=\"java\"></name>" 
       + "</Columns></File><File rootProfile=\"efg\" extension=\"ghi\"><Columns><name id=\"a\" profileName=\"DATE\" type=\"java\"></name>" 
       + "<name id=\"b\" profileName=\"DATE\" type=\"java\"></name></Columns></File></service></Services>"; 
     DocumentBuilderFactory documentFactory = DocumentBuilderFactory 
       .newInstance(); 
     DocumentBuilder documentBuilder = null; 

     documentBuilder = documentFactory.newDocumentBuilder(); 

     // org.w3c.dom.Document doc = documentBuilder.parse(xmlFile); 
     org.w3c.dom.Document doc = documentBuilder.parse(new InputSource(
       new ByteArrayInputStream(xml.getBytes()))); 

     doc.getDocumentElement().normalize(); 
     NodeList nodeList0 = doc.getElementsByTagName("service"); 
     NodeList nodeList1 = null; 
     NodeList nodeList2 = null; 
     System.out.println("Root element :" 
       + doc.getDocumentElement().getNodeName()); 

     for (int temp0 = 0; temp0 < nodeList0.getLength(); temp0++) { 
      Node node0 = nodeList0.item(temp0); 

      System.out.println("\nElement type :" + node0.getNodeName()); 
      Element Service = (Element) node0; 

      if (node0.getNodeType() == Node.ELEMENT_NODE) { 
       System.out.println("-----------------" + temp0 
         + "----------------------------------"); 
       System.out.println("name : " + Service.getAttribute("name")); 
       System.out.println("id : " + Service.getAttribute("id")); 
       nodeList1 = Service.getChildNodes(); 
       for (int temp = 0; temp < nodeList1.getLength(); temp++) { 
        Node node1 = nodeList1.item(temp); 

        System.out 
          .println("\nElement type :" + node1.getNodeName()); 

        Element File = (Element) node1; 

        if (node1.getNodeType() == Node.ELEMENT_NODE) { 

         System.out.println("rootProfile:" 
           + File.getAttribute("rootProfile")); 
         System.out.println("extension : " 
           + File.getAttribute("extension")); 

         nodeList2 = File.getChildNodes();// colums 
         for (int temp1 = 0; temp1 < nodeList2.getLength(); temp1++) { 
          Element column = (Element) nodeList2.item(temp1); 
          NodeList nodeList4 = column.getChildNodes(); 
          for (int temp3 = 0; temp3 < nodeList4.getLength(); temp3++) { 
           Element name = (Element) nodeList4.item(temp3); 
           if (name.getNodeType() == Node.ELEMENT_NODE) { 

            System.out.println("id:" 
              + name.getAttribute("id")); 
            System.out.println("profileName : " 
              + name.getAttribute("profileName")); 
            System.out.println("type : " 
              + name.getAttribute("type")); 

           } 
          } 
         } 

        } 

       } 
      } 

     } 
    } 

} 

Выход:

Корневой элемент: Услуги

Тип элемента: обслуживание ----------------- 0 ---- ------------------------------ имя: qwerty id:

Тип элемента: Файл rootProfile: расширение abcd: acd id : 0 profileName : Тип DATE: java id: 1 profileName: DATE type: java

Элемент Тип: rootProfile Файл: EFG расширение: ГХИ идентификатор: а ProfileName : DATE Тип: Java ID: б ProfileName: Тип DATE: Java

+0

не работает Yaar – SUBZ

Смежные вопросы