2012-03-27 5 views
2

스키마를 포함하는 XML 파일을 생성하려고합니다. jaxb를 사용하여 스키마에서 xml 파일을 만들지 만이 xml.My와 함께 스키마를 추가 할 수 없습니다. 파일이 보이는 xml 스키마를 사용하여 xml 파일을 Java로 생성

<transaction> 
    <xs:schema id="transaction" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="transaction" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
     <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="id"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="in" type="xs:string" minOccurs="0" /> 
       <xs:element name="sn" type="xs:string" minOccurs="0" /> 
       <xs:element name="book" type="xs:string" minOccurs="0" /> 
       <xs:element name="author" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      <xs:element name="data"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="dateTime" type="xs:dateTime" minOccurs="0" /> 
       <xs:element name="key" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      <xs:element name="productData"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="dateTime" type="xs:dateTime" minOccurs="0" /> 
       <xs:element name="key" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:complexType> 
    </xs:element> 
    </xs:schema> 
    <id> 
    <in>abcd</in> 
    <sn>1234567</sn> 
    <book>computer</book> 
    <author>klen</author> 
    </id> 
    <data> 
    <dateTime>2011-06-24T17:08:36.3727674+05:30</dateTime> 
    <key>Err</key> 
    </data> 
</transaction> 

하지만 지금까지 내가

<transaction> 
     <id> 
     <in>abcd</in> 
     <sn>1234567</sn> 
     <book>computer</book> 
     <author>klen</author> 
     </id> 
     <data> 
     <dateTime>2011-06-24T17:08:36.3727674+05:30</dateTime> 
     <key>Err</key> 
     </data> 
</transaction> 

내가이 스키마를 추가 할 수있는 방법이 node.is에서이 스키마를 추가하는 방법을 이해하지 못했다처럼 XML 파일의 모양 생성 할 수 있어요

같은 java.Main에서 jaxb를 사용하는 노드 아래 코드의 일부는

입니다.
    transaction.getIdOrDataOrProductData().add(id); 
        transaction.getIdOrDataOrProductData().add(data); 
        transaction.getIdOrDataOrProductData().add(productdata); 
       JAXBContext jaxbContext = JAXBContext.newInstance(Transaction.class); 
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
      jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true); 
        jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT,true); 
      jaxbMarshaller.marshal(transaction, file); 
      jaxbMarshaller.marshal(transaction, System.out); 

XML 파일로 스키마를 추가 할 수있는 코드를 변경할 수있는 방법이 있습니다.
우리의 응용 프로그램은 실제로 주어진 예제처럼 보이지 않으면 파일 구조를 검사합니다. 그러면 삭제 될 것입니다. 그래서이 구조를 따라 데이터베이스를 업데이트해야합니다. 이제 제 질문은 어떻게 추가 할 수 있습니까? jaxb를 사용하는 xml 파일.

C# .NET 플랫폼을 사용하면 java에서 가능한 schema.is로 xml 파일을 생성 할 수 있습니다.

+1

@ Patrice Matignon이 스키마 개체를 보내고 스키마를 사용하여 xml 파일을 생성 할 수있는 스키마를 마샬링하는 방법을 알려주시겠습니까? – saba

+0

@Patrice Matignon 미안하지만 나에게 당신이 그것을 간단히 설명 할 수 있다는 사실이 분명하지 않다는 것을 알았습니다. 나는 자바로 새로운 것입니다. 그래서 나는 당신의 제안을 이해할 수 없습니다. 사실 저는 스키마를 변경하지 않았고, 또 다른 것은 어떻게 변환합니까? 스키마가있는 XML에 xslt. – saba

답변

1

스키마 자체를 인스턴스 문서에 추가해야한다는 내용은 스키마에 아무것도 없습니다.

당신은 같은 필요 :

<xs:element name="transaction" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
    <xs:complexType> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <!-- Adding an element that can supports the schema definition --> 
     <xs:element ref="xs:schema" minOccurs="0" maxOccurs="1"/> 
     <!-- and from here on, what you already have : --> 
     <xs:element name="id"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="in" type="xs:string" minOccurs="0" /> 
      <xs:element name="sn" type="xs:string" minOccurs="0" /> 
      <xs:element name="book" type="xs:string" minOccurs="0" /> 
      <xs:element name="author" type="xs:string" minOccurs="0" /> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     ... 

을 그리고 당신은 당신의 인스턴스 문서에 표시하는 트랜잭션 JAXB 객체에 스키마를 삽입해야 할 것이다.

이제 귀하의 사용 사례에 대해 자세히 알고 싶습니다.이 작업을 수행해야합니까? 문서 자체 (트랜잭션 XML)는 자신이 준수하는 스키마를 간단히 지정할 수 있으며 위치 지정도 할 수 있습니다. :

<transaction xmlns="urn:mytransactionschema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://www.example.com/transaction.xsd" > 

이렇게하면 인스턴스 소비자가 인스턴스 문서에 XML을 포함하는 것보다 XML의 유효성을 검사 할 수있는 능력이 높아집니다.

+0

우리의 응용 프로그램은 실제로 파일 구조를 검사합니다. 내 주어진 예제처럼 보이지 않으면 삭제 될 것입니다. 그래서이 구조를 따라 database.Now를 업데이트해야합니다. 내 질문은 어떻게하면 내 xml을 추가 할 수 있습니까? jaxb를 사용하는 파일. – saba

+0

이 스키마 개체를 보내는 방법과 스키마를 마샬링하여 XML 파일을 스키마로 생성 할 수있는 방법을 알려주시겠습니까? – saba

+2

문제는 인스턴스 문서에 스키마 자체를 추가하면 후자가 이전의 인스턴스에 대한 유효성 검사를 실패하게 만들 수 있다는 것입니다. 그렇기 때문에 JAXB 객체에는 상자 밖으로 가져 오는 API가 없습니다. 나는 그것을 소비하는 앱이 있기 때문에 어쨌든 당신이 스키마를 변경할 수 없다고 가정한다 (당신 스스로 변경할 수는 없다). XSLT를 사용하여 마샬링 된 문서에 (정적 인) 스키마를 '주입'할 수 있습니다.이 사이트에서는 게시자가이를 달성하는 데 도움이되는 게시물이 많이 있습니다. –

0

.NET 플랫폼에서 C#을 사용하면 스키마 정의가있는 xml 파일을 만들 수 있다는 것을 알고 있습니다. 자바에서는 불가능하다고 생각합니다.

+0

정말이에요? – saba

관련 문제