Схема XML для SimpleType и атрибутов? - PullRequest
16 голосов
/ 22 декабря 2010

Я пытаюсь создать схему XML, которая может захватывать XML, который выглядит примерно так:

<tagname description="simple string type attribute">
false <!-- simple boolean type -->
</tagname>

Но я сталкиваюсь с трудностями. Можно ли даже определить схему для захвата этого или я snipe hunt ?

Ответы [ 2 ]

38 голосов
/ 22 декабря 2010

Вот, пожалуйста,

<xs:element name="tagname">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:boolean">
                    <xs:attribute name="description" type="xs:string" use="required"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>

А вот проверенный образец

<tagname xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="file:/C:/Untitled2.xsd" description="123">
    true
</tagname>
1 голос
/ 03 декабря 2013

Спасибо, спасибо, спасибо.Некоторое время я боролся с этой проблемой, и на самом деле не совсем очевидно, как определить схему, хотя сам пример XML довольно прост.Моя самая большая проблема заключалась в том, как структурировать класс JAXB, чтобы справиться с этим.Только до тех пор, пока я не увидел ваше определение схемы и не запустил его через xjc, я смог увидеть, как настроить его в JAXB.Классы java JAXB довольно не интуитивны, ИМХО, и я бы никогда не догадался, как их настроить.Я пробовал несколько разных способов заставить это работать без какого-либо успеха.

Ниже приведен пример Java-класса JAXB, который генерируется из вашей опубликованной схемы.Ключ использует аннотацию @XmlValue на поле (вы также можете использовать ее на получателе поля, но удалите аннотацию XmlAccessorType:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "value" })
@XmlRootElement(name = "tagname")
public class Tagname {

  @XmlValue
  protected boolean value;
  @XmlAttribute(name = "description", required = true)
  protected String  description;

  public boolean isValue() {
    return value;
  }

  public void setValue(boolean value) {
    this.value = value;
  }

 get and set for description omitted.

Вот маршаллированный XML-документ JAXB из данного класса:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tagname description="The Description">true</tagname>

Я надеюсь, что это дополнение поможет другим, кто борется с той же неясной проблемой.

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