2012-03-27 9 views
2

Ich versuche, eine Anzahl von XML-Datei zu generieren, die das Schema enthält. Ich benutze Jaxb, um XML-Datei aus dem Schema zu erstellen, aber ich konnte Schema in diesem XML.My nicht hinzufügen Datei sieht aus wieXML-Datei mit XML-Schema in Java erstellen

<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> 

aber bis jetzt bin ich in der Lage xML-Datei zu erzeugen, sehen aus wie

<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> 

ich nicht verstehen, wie dieses Schema hinzuzufügen unter node.is es eine Möglichkeit, dieses Schema hinzufügen unter Knoten mit jaxb in java.Main Teil meines Codes ist wie

gibt es eine Möglichkeit, den Code zu ändern, mit dem ich Schema mit XML-Datei hinzufügen kann.
unsere Anwendung überprüft tatsächlich die Dateistruktur, wenn es nicht wie mein gegebenes Beispiel aussieht, dann wird es gelöscht, also sollte ich dieser Struktur folgen, durch die es die Datenbank aktualisiert. Jetzt ist meine Frage, wie kann ich das meine hinzufügen XML-Datei mit Jaxb.

mit C# .NET-Plattform ist es möglich, XML-Datei mit Schema zu generieren.ist es möglich in Java.

+1

@Patrice Matignon können Sie mir sagen, wie ich dieses Schema-Objekt sowie das Marshalling des Schemas, mit dem ich die XML-Datei mit Schema generieren kann. – saba

+0

@Patrice Matignon Es tut mir leid zu sagen, dass es für mich nicht klar ist, können Sie es kurz beschreiben tatsächlich bin ich neu in Java, so dass ich Ihren Vorschlag nicht verstehen kann.Ich änderte ich nicht mein Schema, und eine andere Sache ist, wie ich konvertieren xslt in XML mit Schema. – saba

Antwort

1

In Ihrem Schema steht nichts, das besagt, dass das Schema selbst zum Instanzdokument hinzugefügt werden muss.

Sie müssen so etwas wie:

<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> 
     ... 

Und dann würden Sie das Schema in Ihre Transaktion JAXB Objekt einfügen müssen es in Ihrem Instanzdokument zu zeigen.

Jetzt möchte ich mehr über Ihren Anwendungsfall wissen: Sind Sie sicher, dass Sie dies tun müssen? Das Dokument selbst (die Transaktions-XML) könnte einfach das Schema angeben, dem es entspricht, und sogar einen Ort angeben, z. : Gibt Dies sollte

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

Verbrauchern Ihres Instanzdokument die Möglichkeit, die XML besser als im Beispiel doc, indem es zu validieren.

+0

unsere Anwendung überprüft tatsächlich die Dateistruktur, wenn es nicht wie mein gegebenes Beispiel aussieht, dann wird es gelöscht, also sollte ich dieser Struktur folgen, durch die es die Datenbank aktualisiert. Jetzt ist meine Frage, dass, wie ich dieses meine xml hinzufügen kann Datei mit Jaxb. – saba

+0

können Sie mir sagen, wie ich dieses Schema-Objekt sowie das Marshalling des Schemas, mit dem ich die XML-Datei mit Schema generieren kann. – saba

+2

Das Problem ist, dass das Hinzufügen des Schemas selbst im Instanzdokument letzteres scheitert die Validierung gegen die erstere, die einfach falsch ist). Aus diesem Grund haben Ihre JAXB-Objekte nicht die API, um dies sofort zu tun. Ich nehme an, dass Sie das Schema sowieso nicht ändern können, da es eine App gibt, die es verbraucht (und die Sie nicht selbst ändern können). Ich würde XSLT auf die eine oder andere Weise verwenden, um Ihr (statisches) Schema in Ihr Marshalled Dokument zu "injizieren" (es gibt einige Posts auf dieser Site, die Ihnen dabei helfen werden). –

0

Ich weiß, mit C# in .NET-Plattform können Sie dies tun, XML-Datei mit Schema-Definition möglich sein. Ich denke in Java ist es nicht möglich.

+0

bist du dir sicher? – saba