2014-02-24 3 views
0

아래에서 정의 된 XML 스키마를 원하는 xml로보고 싶습니다. 누구든지 XSD에서 무엇을 쓸 것인지 도울 수 있습니다. 미리 감사드립니다. XML 스키마 : XML에xsd 스키마를 사용하여 유효한 xml을 만드는 방법

<xs:element name="Animal"> 
         <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="xs:string"> 
          <xs:attribute name="type" type="xs:string" /> 
          </xs:extension> 
         </xs:simpleContent> 
         </xs:complexType> 
        </xs:element> 

예상 출력 : <Animal type="carnivore">Tiger</Animal>.

+0

무엇 정확히 당신이 스키마와 함께하고 싶습니까? 스키마와 인스턴스를 _associate_하여 유효성을 검사 할 수 있습니까? 스키마를 사용하여 인스턴스를 생성하지 않는 한 "예상 출력"과 같은 것은 없습니다. 이 경우 자바로 무언가를 쓰고 싶을 것이다. 그게 다야? – helderdarocha

+0

예 내 인스턴스를 스키마에 연결하려고합니다. XSD 파일을 사용하여 위의 예외 출력을 표시하고 싶습니다. – user3348161

+0

오, 오케이. 그런 다음 그 대답에 추가 할 것입니다. – helderdarocha

답변

0

표시 한 요소 만 포함하는 스키마를 사용하면 JAXB를 사용하여 Java에서 원하는 인스턴스를 생성 할 수 있습니다. 귀하의 예제에 몇 가지 컨텍스트를 추가하고 네임 스페이스를 포함했습니다. 이것은 전체 XML 스키마 파일입니다 (나는 animals.xsd라고 불렀다) :

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://animals" 
      targetNamespace="http://animals" 
      elementFormDefault="qualified"> 
    <xs:element name="Animal"> 
     <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
        <xs:attribute name="type" type="xs:string" /> 
       </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

당신이 XML 스키마에서 클래스를 생성 할 수 xjc 도구 (자바 컴파일러에 XSD)를 사용.

xjc animals.xsd 

을 그리고 당신의 클래스 경로에 이러한

animals/Animal.java 
animals/ObjectFactory.java 
animals/package-info.java 

장소 이러한 파일을 생성합니다 : 그래서 당신은 간단하게 실행할 수 있습니다. 지금 당신은 당신이 클래스를 사용하여 인스턴스를 생성 할 수있는 간단한 프로그램을 작성, 다음 JAXB 마샬를 사용하여 XML로 직렬화 할 수 있습니다

결과는 콘솔에 인쇄됩니다
import animals.Animal; 
import javax.xml.bind.*; 

public class App { 

    public static void main(String[] args) throws JAXBException { 
     Animal tiger = new Animal(); 
     tiger.setType("carnivore"); 
     tiger.setValue("Tiger"); 

     JAXBContext jaxbContext = JAXBContext.newInstance(Animal.class); 
     Marshaller m = jaxbContext.createMarshaller(); 
     m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     m.marshal(tiger, System.out); 
    } 
} 

:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Animal xmlns="http://animals" type="carnivore">Tiger</Animal> 
+1

단순히 인스턴스를 스키마에 연결하려면 네임 스페이스가 있는지 여부에 따라 하나 이상의 특성을 추가해야합니다. 네임 스페이스가있는 위의 스키마와 인스턴스가 같은 디렉토리에 있으면' Tiger'. – helderdarocha

관련 문제