Создание XML-файла с XML-схемой в Java - PullRequest
2 голосов
/ 27 марта 2012

Я пытаюсь сгенерировать номер XML-файла, который содержит схему. Я использую jaxb для создания XML-файла из схемы, но я не смог добавить схему в этот XML-файл. Мой нужный файл выглядит как

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

, но до сих пор я могу генерировать XML-файл, похожий на

<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 есть какой-нибудь способ добавить эту схему в node, используя jaxbв java.Main часть моего кода похожа на

                    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.
наше приложение фактически проверяет структуру файла, если онане похоже на мой данный пример, то он будет удален, поэтому я должен следовать этой структуре, с помощью которой он будет обновлять базу данных. Теперь мой вопрос заключается в том, как я могу добавить этот мой XML-файл, используя jaxb.

, используяНа платформе C # .NET можно создать XML-файл со схемой. Это возможно в Java.

Ответы [ 2 ]

1 голос
/ 28 марта 2012

В вашей схеме нет ничего, что говорило бы о том, что сама схема должна быть добавлена ​​в экземплярный документ.

Вам понадобится что-то вроде:

<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 лучше, чемвключая его в экземпляр документа.

0 голосов
/ 30 марта 2012

Я знаю, используя C # на платформе .NET, вы можете сделать это, XML-файл с определением схемы может быть возможен.Я думаю, что в Java это невозможно.

...