2010-12-21 15 views
13

Estoy intentando crear un esquema XML que puede capturar XML que se ve algo como esto:Esquema XML para SimpleType y Atributo?

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

Pero estoy corriendo en dificultades. ¿Es posible definir un esquema para capturar esto o estoy en un snipe hunt?

Respuesta

33

Aquí tiene

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

Y aquí está la muestra validado

<tagname xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="file:/C:/Untitled2.xsd" description="123"> 
    true 
</tagname> 
1

Gracias, gracias, gracias. He estado luchando con este problema por un tiempo y no es tan obvio cómo definir el esquema a pesar de que la muestra de XML real es bastante directa. Mi mayor problema fue cómo estructurar una clase JAXB para manejar esto. Fue solo hasta que vi su definición de esquema y la ejecuté a través de xjc que pude ver cómo configurarla en JAXB. Las clases JAXB java son bastante poco intuitivas en mi humilde opinión y nunca hubiera adivinado cómo configurarlo. He intentado varias formas diferentes de hacer que esto funcione sin ningún éxito.

A continuación se muestra una muestra de la clase JAXB java que se genera a partir de su esquema publicado. La clave es usar la anotación de la @XmlValue en el campo (que también se puede utilizar en el captador del campo, pero eliminar la anotación 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. 

Aquí está el documento XML JAXB movilizados desde la clase dada:

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

espero que esto además ayudará a otros que están luchando con el mismo problema oscura.

Cuestiones relacionadas