xmlbeans — установить содержимое сложного типа

Мой файл xsd содержит:

                <xs:sequence>
                    <xs:element name="Book">
                        <xs:complexType>
                            <xs:attribute name="author" type="xs:string" />
                            <xs:attribute name="title" type="xs:string" />
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>

С помощью xmlbeans я могу легко установить атрибуты, используя:

    Book book= books.addNewBook();
    book.setTitle("The Lady and a Little Dog");

Я знаю, что могу использовать newCursor() для установки содержимого элемента, но лучший ли это способ?

object.newCursor().setTextValue(builer.toString());

person dogbane    schedule 10.04.2009    source источник


Ответы (2)


Я не совсем понимаю ваш вопрос.

Я думаю, что ваш XSD даст вам классы Java для создания XML следующим образом:

<book author="Fred" title="The Lady and a Little Dog" />

Вы имеете в виду, что хотите установить «внутренний» текст в элементе XML, чтобы в итоге вы получили такой XML?

<book>
  <author>Fred</author>
  <title>The Lady and a Little Dog</title>
</book>

Если это так, измените свой XSD на это, чтобы использовать вложенные элементы, а не атрибуты:

<xs:sequence>
    <xs:element name="Book">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="author" type="xs:string" />
            <xs:element name="title" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:sequence>

Тогда вы просто сможете сделать:

Book book= books.addNewBook();
book.setAuthor("Fred");
book.setTitle("The Lady and a Little Dog");

ОБНОВЛЕНИЕ

Хорошо, сейчас я понимаю.

Попробуй это:

<xs:element name="Book"  minOccurs="0" maxOccurs="unbounded">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="author" type="xs:string" />
        <xs:attribute name="title" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>    
</xs:element>  

А потом:

    Book book1 = books.addNewBook();
    book1.setAuthor("Fred");
    book1.setTitle("The Lady and a Little Dog");
    book1.setStringValue("This is some text");

    Book book2 = books.addNewBook();
    book2.setAuthor("Jack");
    book2.setTitle("The Man and a Little Cat");
    book2.setStringValue("This is some more text");

Что должно дать XML, как это, я думаю, это то, что вы хотите:

<Book author="Fred" title="The Lady and a Little Dog">This is some text</Book>
<Book author="Jack" title="The Man and a Little Cat">This is some more text</Book>
person A_M    schedule 20.05.2009
comment
Вот как я хотел бы, чтобы мой xml выглядел так: ‹автор книги=Фред title=Леди и маленькая собачка ›Это какой-то текст‹/книга› Как я могу поставить бит Это какой-то текст? Спасибо - person dogbane; 20.05.2009

Я не уверен, что это именно то, о чем вы спрашиваете, но лучший способ установить значение атрибутов или элементов с помощью XMLBeans — использовать геттеры и сеттеры, сгенерированные XMLBeans.

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

person Paul Morie    schedule 20.05.2009