2015-01-28 5 views
0

내가 XML 프로그래밍의 안돼서 XML로 Java와 함께 JAXP를 사용하여 이런 종류의 일을 할 수 있다는 것을 알게되었습니다. 내 응용 프로그램은 인터페이스를 사용하여 일부 데이터를 검색하고 이전에 작성한 DTD와 관련하여 XML 파일에 데이터를 작성해야합니다. JAXB 시리얼, 나는, (DTD 파일에 대한)</p> <p>I를 잘 형성 유효한 XML 파일에 일부 자바 객체를 작성하는 것을 시도하고

나는이 작업에 대한 몇 가지 정보를 찾기 위해 노력하지만 실패했습니다.

는 어떻게이 작업을 수행해야 하죠?

편집 : 나는 (A XML 스키마로 전환 할 수 없습니다) DTD를 고수해야한다는 것을 나는 자바 viceversa에를 XML로 개체, 그리고 FROM 갈 필요가 있습니다. Duplicated Answer가 내 질문에 적용되지 않는 것으로 나타났습니다. DTD에 어떤 도움이 될 수있는 경우

모르겠지만, 여기 있습니다.

DTD

<!ELEMENT AIRCRAFTS (AIRCRAFT+)> 
<!ELEMENT AIRCRAFT (MODEL, SEATS)> 
<!ELEMENT MODEL (#PCDATA)> 
<!ELEMENT SEATS (SEAT+)> 
<!ELEMENT SEAT (#PCDATA)> 

<!ELEMENT FLIGHTS (FLIGHTREADER+)> 
<!ELEMENT FLIGHTREADER (DEPARTURE, TIME, DESTINATION)> 
<!ELEMENT DEPARTURE (#PCDATA)> 
<!ELEMENT TIME (HOUR, MINUTE)> 
<!ELEMENT HOUR (#PCDATA)> 
<!ELEMENT MINUTE (#PCDATA)> 
<!ELEMENT DESTINATION (#PCDATA)> 


<!ELEMENT FLIGHTINSTANCES (FLIGHTINSTANCEREADER+)> 
<!ELEMENT FLIGHTINSTANCEREADER (AIRCRAFTID, DATE, DELAY, DEPARTUREGATE, FLIGHTREADERID, PASSENGERREADER+, STATUS)> 
<!ELEMENT AIRCRAFTID (#PCDATA)> 
<!ELEMENT DATE (#PCDATA)> 
<!ELEMENT DELAY (#PCDATA)> 
<!ELEMENT DEPARTUREGATE (#PCDATA)> 
<!ELEMENT FLIGHTREADERID (#PCDATA)> 
<!ELEMENT PASSENGERREADER (NAME, FLIGHTINSTANCEID, SEATID, BOARDED)> 
<!ELEMENT FLIGHTINSTANCEID (#PCDATA)> 
<!ELEMENT BOARDED (#PCDATA)> 
<!ELEMENT NAME (#PCDATA)> 
<!ELEMENT SEATID (#PCDATA)> 
<!ELEMENT STATUS (#PCDATA)> 

<!ATTLIST FLIGHTINSTANCEREADER id ID #REQUIRED> 
<!ATTLIST FLIGHTREADER id ID #REQUIRED> 
<!ATTLIST AIRCRAFT id ID #REQUIRED> 
+0

이 [않음 (http://stackoverflow.com/questions/10312159/generate-java-classes-with-jaxb-from-a-dtd-file-how-can-i-modify-the-dtd# answer-14927126) 귀하의 질문에 대한 답변입니다. 내가 알아야 할 것은, 나는 이것을 최근에 시도했고 효과가 있었다. –

+0

답장을 보내 주셔서 감사합니다. 그러나 질문이 중복되어 있다고 생각하지 않습니다. 연결된 링크가 내 질문에 답하지 않고 제약 조건을 충족시키지 못합니다. – Ivano

+0

내가 제공 한 대답 링크를 통해 Java 개체를 생성 할 수 있습니다. DTD ('bin' 폴더에 JDK와 함께 제공되는'xjc' 사용). XML 스키마는 생성하지 않지만 JAXB를 사용하여 Java Object에서 XML을 생성 할 수 있습니다. DTD에서 스키마를 작성하는 것은 힘들 수 있습니다. –

답변

1

기본적으로 자바 객체를 JAXBContextMarshaller으로 변환하여 XML 유효성 검사에 DTD를 사용하여 XML을 변환하는 것과 같은 방법입니다.

SAXParserFactory spf = SAXParserFactory.newInstance(); 
    SAXParser sp = spf.newSAXParser(); 
    XMLReader xr = sp.getXMLReader(); 

    JAXBContext jc = JAXBContext.newInstance("blog.log4j"); 
    Unmarshaller unmarshaller = jc.createUnmarshaller(); 
    UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler(); 
    xr.setContentHandler(unmarshallerHandler); 

    FileInputStream xmlStream = new FileInputStream("src/blog/log4j/sample1.xml"); 
    InputSource xmlSource = new InputSource(xmlStream); 
    xr.parse(xmlSource); 

    Log4JConfiguration config = (Log4JConfiguration) unmarshallerHandler.getResult(); 

    Marshaller marshaller = jc.createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    marshaller.marshal(config, System.out); 

Source :

샘플 코드를 참조하십시오.

-1

먼저 당신은 당신이 DTD에 대한 ID를 확인해야 XML로 개체를 serialize해야합니다.

Here 클래스를 xml로 serialize하는 방법을 보여줍니다.

This one

외부 또는 XML 파일 내에 DTD와 XML 파일의 유효성을 검사하는 방법을 보여줍니다.

+0

질문은 일부 DTD에 따라 XML에서 개체를 serialize하는 방법에 대한 것입니다. 이것은 귀하의 대답에서 다루어지지 않습니다. – lexicore