Есть ли API Java для генерации XML с определением встроенной схемы - PullRequest
1 голос
/ 30 марта 2012

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

Мой 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>computer</in>
    <sn>1234567</sn>
    <book>JAVA</book>
    <author>klen</author>
  </id>
  <data>
    <dateTime>2011-06-24T17:08:36.3727674+05:30</dateTime>
    <key>Err</key>
  </data>
</transaction>

В моем приведенном примере мой xml-файл содержит данные, а также схему, мне нужно сгенерировать этот тип файла из схемы с использованием Java.

Я могу создать только часть XML, используя jaxb, и основная часть моего кода выглядит как

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-файлом.

@ jtahlborn ок, я постараюсь выкопать это, спасибо за вашу помощь. У меня есть еще один вопрос, который я слышал о том, что stax лучше, чем dom для записи XML, поэтому я хочу использовать stax, можно ли задать пространство имен и другие вещи , У меня есть другой вопрос, правда ли, что jaxb используется только для преобразования XML в XML-схему (без маршалинга) и XML-схемы в XML (маршалинг), и если мне нужно написать XML-файл, то нам нужно использовать jaxb [DOM, STAX (поток) на основе чтения записи), SAX (только чтение потока)].

1 Ответ

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

Вы хотели бы:

  1. создать документ DOM из вашей схемы (например, проанализировать файл схемы)
  2. создать новый документ DOM
  3. добавить корневой узелк вашему новому документу DOM (например, «транзакция»)
  4. добавьте документ схемы из шага 1. в качестве первого дочернего элемента элемента «транзакция»
  5. добавьте фактические данные документа в качестве последующих дочерних элементовэлемент «транзакция»

В качестве альтернативы, если вы хотите использовать JAXB для генерации «основного» xml-вывода, тогда вы можете:

  1. заполнить модели jaxb (созданные изсхема)
  2. маршалирование моделей jaxb в документ DOM
  3. создание документа DOM из вашей схемы (например, анализ файла схемы)
  4. вставка документа схемы из шага 3. как первый дочерний элемент элемента «транзакция» в вашем документе DOM

(с помощью нескольких хитростей настройки Jaxb вы, вероятно, могли бы получить в своей модели транзакции свойство элемента «схема», а затемВы могли бы установить это проperty из разобранной схемы doc и маршал всей модели за один раз)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...