2014-10-08 14 views
1

아래 그룹화 된 태그 아래에 중첩 된 이름 태그의 값을 얻는 방법. 열 태그 아래에 중첩 된 이름의 값을 가져올 수 있습니다. 그룹화 된 태그에 이름의 중첩 된 값을 가져 오는 방법. 그룹화 된 태그 아래에 이름 태그의 속성이 다릅니다. 그런 다음 grouped 태그에서 요소를 요구하지 문서에서의 grouped 아래 중첩name 태그를해야하는 경우DOM 파서를 사용하여 xml을 파싱하는 데 어려움

<Services> 
    <Service name="check" regrx="" reverseExtention="" > 
    <File rootProfile="Test" extension="txt" seperator="," targetSeperator="q12"> 
    <Columns> 
    <name id="1" usn="2234" dob="030395" age="55" validity="20" /> 
    <name id="2" usn="I_TWO" dob="true" age="10" validity="44" > 
      <grouped> 
       <name id="343" value1="TYPE0" value2="TYPE4" type="" value7="1"></name> 
       <name id="564" value1="TYPE6" value2="TYPE7" type="" value7="0"></name> 
      </grouped> 
    </name> 
    <name id="3" usn="55453" dob="050584" age="35" validity="123"/> 
    <name id="5" usn="7565" dob="050488" age="44" validity="55"/> 
    </Columns> 
    </File> 
    </Service> 
</Services> 

여기

import java.io.File; 
    import javax.xml.parsers.DocumentBuilder; 
    import javax.xml.parsers.DocumentBuilderFactory; 
    import org.w3c.dom.Document; 
    import org.w3c.dom.Element; 
    import org.w3c.dom.Node; 
    import org.w3c.dom.NodeList; 

    public class Test { 
     public static void main(String[] args) { 
      // TODO Auto-generated method stub 
      try{ 
      File fXmlFile = new File("D://test3.xml"); 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(fXmlFile); 
      doc.getDocumentElement().normalize(); 
      NodeList nodeList0 = doc.getElementsByTagName("Service"); 
      NodeList nodeList1 = doc.getElementsByTagName("File"); 
      NodeList nodeList2 = doc.getElementsByTagName("name"); 
      NodeList nodeList3= doc.getElementsByTagName("grouped"); 
      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; 
       System.out.println("----" + temp0 + "-------"); 
       if (node0.getNodeType() == Node.ELEMENT_NODE) { 
        System.out.println("Name : " + Service.getAttribute("name")); 
        System.out.println("regrx : " + Service.getAttribute("regrx")); 
       System.out.println("reverex"+Service.getAttribute("reverseExtention")); 
        for (int temp = 0; temp < nodeList1.getLength(); temp++) { 
         Node node1 = nodeList1.item(temp); 
         System.out.println("------file" + temp + "--------"); 
         System.out.println("\nElement type :" + node1.getNodeName()); 
         Element File = (Element) node1; 

         //used for getting file level 
         if (node1.getNodeType() == Node.ELEMENT_NODE) { 
          System.out.println("rootProfile:" + File.getAttribute("rootProfile")); 
          System.out.println("extension : " + File.getAttribute("extension")); 
          System.out.println("seperator : " + File.getAttribute("seperator")); 
          System.out.println("targetSeperator : " +  File.getAttribute("targetSeperator")); 

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

           if (node2.getNodeType() == Node.ELEMENT_NODE) { 
            System.out.println("id:" + name.getAttribute("id")); 
            System.out.println("usn : " + name.getAttribute("usn")); 
            System.out.println("dob : " + name.getAttribute("dob")); 
            System.out.println("age : " + name.getAttribute("age")); 
            System.out.println("validity : " + name.getAttribute("validity")); 

            //to get grouped node, the problem seems to be here       
            Node node3=nodeList3.item(temp2);  
            if(node3.hasChildNodes()){  
            Element grouped=(Element)node3; 
            if(node3.getNodeType()==Node.ELEMENT_NODE){ 
             System.out.println("id:" + grouped.getAttribute("id")); 
             System.out.println("value1:" + grouped.getAttribute("value1")); 
             System.out.println("value2:" + grouped.getAttribute("value2")); 
             System.out.println("type:" + grouped.getAttribute("type")); 
             System.out.println("value7:" + grouped.getAttribute("value7"));            
             } 
            } 

            } 
           }   
         } 

        } 
       } 
      } 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 

답변

0

이 수정 된 코드입니다

import java.io.File; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

public class Test { 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     try { 
      File fXmlFile = new File("D://test3.xml"); 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory 
        .newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(fXmlFile); 
      doc.getDocumentElement().normalize(); 
      NodeList nodeList0 = doc.getElementsByTagName("Service"); 
      NodeList nodeList1 = doc.getElementsByTagName("File"); 
      NodeList nodeList2 = doc.getElementsByTagName("name"); 
      NodeList nodeList3 = doc.getElementsByTagName("grouped"); 
      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; 
       System.out.println("----" + temp0 + "-------"); 
       if (node0.getNodeType() == Node.ELEMENT_NODE) { 
        System.out 
        .println("Name : " + Service.getAttribute("name")); 
        System.out.println("regrx : " 
          + Service.getAttribute("regrx")); 
        System.out.println("reverex" 
          + Service.getAttribute("reverseExtention")); 
        for (int temp = 0; temp < nodeList1.getLength(); temp++) { 
         Node node1 = nodeList1.item(temp); 
         System.out.println("------file" + temp + "--------"); 
         System.out.println("\nElement type :" 
           + node1.getNodeName()); 
         Element File = (Element) node1; 

         // used for getting file level 
         if (node1.getNodeType() == Node.ELEMENT_NODE) { 
          System.out.println("rootProfile:" 
            + File.getAttribute("rootProfile")); 
          System.out.println("extension : " 
            + File.getAttribute("extension")); 
          System.out.println("seperator : " 
            + File.getAttribute("seperator")); 
          System.out.println("targetSeperator : " 
            + File.getAttribute("targetSeperator")); 

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

           if (node2.getNodeType() == Node.ELEMENT_NODE) { 
            System.out.println("id:" 
              + name.getAttribute("id")); 
            System.out.println("usn : " 
              + name.getAttribute("usn")); 
            System.out.println("dob : " 
              + name.getAttribute("dob")); 
            System.out.println("age : " 
              + name.getAttribute("age")); 
            System.out.println("validity : " 
              + name.getAttribute("validity")); 

            // to get grouped node, the problem seems to 
            // be here 
            // Node node3 = nodeList3.item(temp2); 
            NodeList grouped = node2.getChildNodes(); 
            if (grouped != null 
              && grouped.getLength() > 0) { 
             for (int ii = 0; ii < grouped 
               .getLength(); ii++) { 
              Node group = grouped.item(ii); 
              { 
               NodeList gropedNames = group 
                 .getChildNodes(); 
               if (gropedNames != null 
                 && gropedNames 
                 .getLength() > 0) { 
                for (int jj = 0; jj < gropedNames 
                  .getLength(); jj++) { 
                 if (gropedNames 
                   .item(jj) != null 
                   && gropedNames 
                   .item(jj) 
                   .getAttributes() != null) { 
                  System.out 
                  .println(gropedNames 
                    .item(jj) 
                    .getAttributes() 
                    .getNamedItem(
                      "id")); 
                  System.out 
                  .println(gropedNames 
                    .item(jj) 
                    .getAttributes() 
                    .getNamedItem(
                      "value1")); 
                  System.out 
                  .println(gropedNames 
                    .item(jj) 
                    .getAttributes() 
                    .getNamedItem(
                      "value2")); 
                  System.out 
                  .println(gropedNames 
                    .item(jj) 
                    .getAttributes() 
                    .getNamedItem(
                      "value7")); 
                 } 
                } 
               } 
              } 
             } 
            } 
           } 
          } 
         } 

        } 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
0

아래에있는 내 코드입니다.

Document.getElementsByTagName()

Elemenent의 모든 자손 요소 (예를 들어, 자녀, 손자 등)을 돌려 줄 것 ElementgetElementsByTagName()를 호출, 그 이름으로 당신에게 다시 모든 태그를 제공합니다.

당신은 안전하게 groupedNodeElement 캐스팅과에 getElementsByTagName()를 호출 할 수

NodeList groupedNodeList = doc.getElementsByTagName("grouped"); 
for (int i = 0; i < groupedNodeList .getLength(); i++) { 
    Element groupedElement = (Element) groupedNodeList .item(i); 
    NodeList nameList = groupedElement.getElementsByTagName("name"); 

    // Here you go, you have the list of name tags UNDER grouped 
    // Printing the id and value attributes of the name tag: 
    for (int j = 0; j < nameList.getLength(); j++) { 
     Element name = (Element) nameList.item(j); 
     System.out.println("Found <name>: id=" + name.getAttribute("id")); 
     System.out.println("\tvalue1=" + name.getAttribute("value1")); 
     System.out.println("\tvalue2=" + name.getAttribute("value2")); 
     System.out.println("\tvalue7=" + name.getAttribute("value7")); 
    } 
} 

출력은 다음과 같습니다

다음
Found <name>: id=343 
    value1=TYPE0 
    value2=TYPE4 
    value7=1 
Found <name>: id=564 
    value1=TYPE6 
    value2=TYPE7 
    value7=0 
관련 문제