SimpleType和Attribute的XML Schema?

时间:2010-12-21 23:42:00

标签: xml xsd

我正在尝试创建一个可以捕获看起来像这样的XML的XML模式:

<tagname description="simple string type attribute">
false <!-- simple boolean type -->
</tagname>
但是我遇到了困难。甚至可以定义一个模式来捕获它,还是我在snipe hunt上?

2 个答案:

答案 0 :(得分:36)

你去吧

<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 :(得分:1)

谢谢,谢谢,谢谢。我一直在努力解决这个问题,即使实际的XML样本非常简单,但是如何定义模式并不是那么明显。我最大的问题是如何构造一个JAXB类来处理它。直到我看到你的模式定义并通过xjc运行它,我才能看到如何在JAXB中设置它。 JAXB java类是非常不直观的恕我直言,我永远不会猜到如何设置它。我已经尝试了几种不同的方法让它工作而没有任何成功。

下面是从您发布的模式生成的JAXB java类的示例。关键是在字段上使用@XmlValue注释(您也可以在字段的getter上使用它但删除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.

以下是来自给定类的编组JAXB XML文档:

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

我希望这一补充能够帮助那些正在努力解决同样模糊问题的人。