표시 한 요소 만 포함하는 스키마를 사용하면 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>
무엇 정확히 당신이 스키마와 함께하고 싶습니까? 스키마와 인스턴스를 _associate_하여 유효성을 검사 할 수 있습니까? 스키마를 사용하여 인스턴스를 생성하지 않는 한 "예상 출력"과 같은 것은 없습니다. 이 경우 자바로 무언가를 쓰고 싶을 것이다. 그게 다야? – helderdarocha
예 내 인스턴스를 스키마에 연결하려고합니다. XSD 파일을 사용하여 위의 예외 출력을 표시하고 싶습니다. – user3348161
오, 오케이. 그런 다음 그 대답에 추가 할 것입니다. – helderdarocha