2011-11-30 4 views
1

다음과 다소 비슷한 xml이 있습니다. 속성과 태그에서 값을 가져 와서 저장해야합니다. 하지만 레벨 2 (3,4 등) 중첩 된 요소를 얻는 방법을 이해할 수 없습니다. 나는 인터넷에서 찾은 다음 코드를 사용한다. DOM을 사용하지만 올바른 RegNumber와 그 속성을 얻을 수 없다. 미리 감사드립니다. Java : 중첩 된 요소가 많은 xml 읽기

nodeList = xmldocument.getElementsByTagName("Header");  
     if (nodeList != null && nodeList.getLength() > 0) { 
      for (int i = 0; i < nodeList.getLength(); i++) { 
       //get the header element 
       Element header = (Element) nodeList.item(i); 
       System.out.println("Element: " + ((Element)nodeList.item(i)).getNodeName()); 
       System.out.println(header.getAttribute("time")); 
      } 
     } 
     nodeList = xmldocument.getElementsByTagName("Document");  
     if (nodeList != null && nodeList.getLength() > 0) { 
      for (int i = 0; i < nodeList.getLength(); i++) { 

       //get the document element 
       Element document = (Element) nodeList.item(i); 
       System.out.println("Element: " + ((Element)nodeList.item(i)).getNodeName()); 
       System.out.println(document.getAttribute("Id")); 

       nodeList = document.getElementsByTagName("RegNumber"); 
       for (int j = 0; j < nodeList.getLength(); j++) { 

        //get the RegNumber element 
        Element regNumber = (Element) nodeList.item(j); 
        System.out.println("Element: " + ((Element)nodeList.item(j)).getNodeName()); 
        System.out.println(regNumber.getAttribute("regpoint")); 

       } 
      } 

     } 

XML :

<XML xsi:schemaLocation="http://www.codetools.it XSD2.xsd" xmlns="http://www.codetools.it" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
      <Header time="2001-12-17T09:30:47Z" /> 
      <Document Id="456"> 
       <RegNumber regpoint="" regdate="2001-12-17T09:30:47Z">123/456</RegNumber> 
       <Confident flag="0"/> 
       <DocNumber kind=""> 
        <RegNumber RegPoint="" regdate="2001-12-17T09:30:47Z">456/789</RegNumber> 
        <Organization fullname="lol" shortname="" ownership="lol" ogrn="78945612" inn=""> 
         <OfficialPerson> 
          <Name Firstname="John"/> 
          <Official Department="" post=""/> 
          <SignDate>2001-12-17T09:30:47Z</SignDate> 
         </OfficialPerson> 
         <Econtact type="1">[email protected]</Econtact> 
         <Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/> 
        </Organization> 
       </DocNumber> 
       <DocTransfer os="Windows" type=".docx" type_ver="" char_set="" description="kkkk"> 
    </DocTransfer> 
      <Reghistory idnumber=""> 
       <RegNumber RegPoint="" regdate=""/> 
       <Organization fullname="" shortname="" ownership="" ogrn="" inn=""> 
        <Econtact type=""/> 
        <Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/> 
       </Organization> 
      </Reghistory> 
      <Author> 
       <Organization fullname="" shortname="" ownership="" ogrn="12345678" inn=""> 
        <OfficialPerson> 
         <Name Firstname="" /> 
         <Official Department="" post=""/> 
         <SignDate>2011-12-17T09:30:47Z</SignDate> 
        </OfficialPerson> 
        <Econtact type="Рї">[email protected]</Econtact> 
        <Address street="" postcode="1234" postbox="" flat="" district="" region="" country="" nontypical="" house="12"/> 
       </Organization> 
       <PrivatePerson> 
        <Name Surname="" Firstname="" Fathername=""/> 
        <Econtact type=""/> 
        <Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/> 
        <SignDate/> 
        <Rank privilege="" socialposition="" sex=""/> 
       </PrivatePerson> 
      </Author> 
      <Validator attestation="0"> 
       <DocNumber kind="наказ"> 
        <RegNumber RegPoint="" regdate="2001-12-17T09:30:47Z"/> 
        <Organization fullname="" shortname="" ownership="" ogrn="14725836" inn=""> 
         <Econtact type="Рї">[email protected]</Econtact> 
         <Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/> 
        </Organization> 
       </DocNumber> 
       <Organization fullname="" shortname="РљРњРЈ" ownership="" ogrn="96325878" inn=""> 
        <Econtact type="String">[email protected]</Econtact> 
        <Address street="Пушкіна" settlement="" postcode="4563" postbox="" flat="" district="" region="" country="" nontypical="" house="23"/> 
        <OfficialPerson> 
         <Name Surname="" Firstname="" Fathername=""/> 
         <Official Department="" post=""/> 
         <SignDate>2011-12-17T09:30:47Z</SignDate> 
        </OfficialPerson> 
       </Organization> 
       <PrivatePerson> 
        <Name Surname="" Firstname="" Fathername=""/> 
        <Econtact type=""></Econtact> 
        <Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/> 
        <SignDate></SignDate> 
        <Rank privilege="" socialposition="" sex=""/> 
       </PrivatePerson> 
      </Validator> 
      <Addressee> 
       <Referred id="" retype=""> 
        <RegNumber regdate="" regpoint=""/> 
        <TaskNumber taskDate=""/> 
       </Referred> 
       <Organization fullname="String" shortname="" ownership="" ogrn="85236974" inn=""> 
        <OfficialPerson> 
         <Name Surname="" Firstname="" Fathername=""/> 
         <Official Department="" post=""/> 
        </OfficialPerson> 
        <Econtact type="Рї">[email protected]</Econtact> 
        <Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" type="" house=""/> 
       </Organization> 
       <PrivatePerson> 
        <Name Surname="" Firstname="" Fathername=""/> 
        <Econtact type=""></Econtact> 
        <Address street="" settlement="" postcode="" postbox="" flat="" district="" region="" country="" nontypical="" house=""/> 
        <Rank privilege="" socialposition="" sex=""/> 
       </PrivatePerson> 
      </Addressee> 
      <Writer> 
       <Organization fullname="" shortname="" ownership="" ogrn="" inn=""> 
        <OfficialPerson> 
         <Name Surname="" Firstname="" Fathername=""/> 
         <Econtact type=""></Econtact> 
        </OfficialPerson> 
       </Organization> 
       <PrivatePerson> 
        <Name Surname="" Firstname="" Fathername=""/> 
        <Econtact type=""></Econtact> 
       </PrivatePerson> 
      </Writer> 
     </Document> 

편집. 내가 권고 한대로 JAXB 딱지를 찾으려고 노력한다. xjc 도구는 ObjectFactory, package-info, XML의 3 가지 클래스를 생성했습니다.

public static void main(String[] args) { 
     try { 

      File file = new File("F:\\Untitled3.xml"); 
      JAXBContext jaxbContext = JAXBContext.newInstance(XML.class); 

      Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
      XML xml = (XML) jaxbUnmarshaller.unmarshal(file); 
      System.out.println(xml); 

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

이 올바른 방법인가, 또는 나는 모든 태그와 객체를 만들고, 속성, 어떻게?

ObjectFactory f =new ObjectFactory(); 
      XML xml1 = f.createXML(); 

을 ObjectFactory를를 사용해야합니다 : 나는 XML에서 개체를 만들려면이 코드를 발견 그런 다음 XML 파일을 만드시겠습니까? 새로운 자바와 jaxb 물건에, 그래서 제발 나와 함께하시기 바랍니다.

+2

XML을 수동으로 구문 분석 하시겠습니까? 더 좋은 방법이 있습니다. [JAXB] (http://en.wikipedia.org/wiki/Java_Architecture_for_XML_Binding) –

+0

답변 해 주셔서 감사합니다. 나는 정말로 내가 무엇을 사용해야하는지 모른다. 방금 돔을 "Java XML 읽기"로 검색하여 찾았으며 이해하기가 매우 쉬워 보였습니다. JAXB에 대한 초보자를위한 링크를주세요. – bunnyjesse112

답변

3

그것은 일반적으로하지 의미 또는 특정 깊이에서 노드에 액세스시키는 방법으로 유용하다 : 분명히 ...

여기에 깊은 몇 수준을가는 내 샘플 코드입니다. 이것은 Java뿐 아니라 오히려 DOM 사양이기 때문에 올바른 결정이라고 생각합니다. 태그 이름을 통해

  1. 및 태그 이름은 일반적으로 노드의 의미를 나타냅니다

    사람들은 일반적으로 많은 의미있는 방식 중 하나를 통해 노드에 액세스 할 수 있습니다.

  2. XPath - 문서의 전체 구조를 의미합니다.
  3. 바인딩, 예를 들어, JAXB는 (기본적으로는 XML을 처리하지 않습니다 더 이상하지만, 자바 클래스)
  4. 이전 SAX (안 DOM)와 StAX를 (DOM과 SAX의 혼합물)

있다 xpath를 보면 정말 도움이 될 것입니다.

+0

답변 해 주셔서 감사합니다. JAXB 초보자를위한 튜토리얼을 연결해 주시겠습니까? – bunnyjesse112

+0

다시 한 번 감사드립니다. 거기에 jaxb에 대한 클래스를 사용할 준비가 내 xml 파일 (나는 그것에 대한 xsd 파일을 가지고) 변환하는 방법? Hibernate는 비슷한 것을 가지고있다. 수동으로 작성하고 주석을 달 수 있을지 의심 스럽습니다. 다시 한번 감사드립니다. – bunnyjesse112

+1

+1 - @ bunnyjesse112 이미 XML 스키마가있는 경우 XJC 도구를 사용하여 객체 모델을 생성 할 수 있습니다.내 블로그의 다음 게시물은 이것이 어떻게 수행되는지를 보여줍니다 : http://blog.bdoughan.com/2010/09/processing-atom-feeds-with-jaxb.html –

1

각 노드에서 "getElementsByTagName"함수를 다시 사용하여 태그 이름별로 요소를 가져옵니다.

DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document doc = db.parse(acpFile); 
     Element docEle = doc.getDocumentElement(); 
     NodeList series = docEle.getElementsByTagName("dod:recordSeries"); 

     if(series != null && series.getLength()>0) 
     { 
      for(int i=0; i<series.getLength(); i++) 
      { 
       Element serie = (Element)series.item(i); 
       System.out.println("S -- "+serie.getAttribute("view:childName")); 
       NodeList categories = serie.getElementsByTagName("dod:recordCategory"); 

       for(int j=0; j<categories.getLength(); j++) 
       { 
        Element category = (Element)categories.item(j); 
        System.out.println("C ---- "+category.getAttribute("view:childName")); 
        NodeList recordFolders = category.getElementsByTagName("rma:recordFolder"); 

        for(int k=0; k<recordFolders.getLength(); k++) 
        { 
         Element folder = (Element)recordFolders.item(k); 
         System.out.println("F ------ "+folder.getAttribute("view:childName")); 
        } 
       } 
      } 
     } 
+0

답변 해 주셔서 감사합니다. 그러나 세리에뿐만 아니라 카테고리가 있다면? – bunnyjesse112