【问题标题】:XML Schema: Element with attributes containing only text?XML Schema:具有仅包含文本的属性的元素?
【发布时间】:2010-09-27 10:56:16
【问题描述】:

我很难找到这个。如何在 XML 模式文件中为 XML 定义一个元素,如下所示:

<option value="test">sometext</option>

我不知道如何定义一个类型为xs:string 并且还具有属性的元素。

这是我目前所得到的:

<xs:element name="option">
    <xs:complexType>
        <xs:attribute name="value" type="xs:string" />
    </xs:complexType>
</xs:element>

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    试试

      <xs:element name="option" type="AttrElement" />
    
      <xs:complexType name="AttrElement">
        <xs:simpleContent>
          <xs:extension base="xs:string">
            <xs:attribute name="value" type="xs:string">
            </xs:attribute>
          </xs:extension>
        </xs:simpleContent>
      </xs:complexType>
    

    【讨论】:

    • 我在尝试您的代码时遇到以下异常 - org.xml.sax.SAXParseException: src-resolve: 无法将名称“AttrElement”解析为 (n)“类型定义”组件。为什么会这样?
    • 如果是这样,可能是因为您的架构文档有一个目标命名空间,您需要使用前缀名称来指向该类型。 (如果前缀tns 绑定到架构文档的目标命名空间,您将使用type="tns:AttrElement" 来引用类型。)
    • @Ashwin 您可能需要使用类型命名空间引用类型(type="tns:AtrElement" 如果 XSD 的默认命名空间是 xs 而不是文档的 targetNamespace。通常在这种情况下定义 tns并使用。
    【解决方案2】:

    ... 或内联等效项:

    <xs:element name="option">
      <xs:complexType>
        <xs:simpleContent>
          <xs:extension base="xs:string">
            <xs:attribute name="value" type="xs:string" />
          </xs:extension>
        </xs:simpleContent>
      </xs:complexType>
    </xs:element>
    

    【讨论】:

    • 我发现在complexType 中定义simpleContent 真的很不直观。但话又说回来,它是 XSD,似乎没有什么是真正直观的。还是谢谢! :-)
    • 这将在 IntelliJ (V12.1.3) 中为我显示一个错误:value 属性是“不允许的”。使用 complexContent 而不是 simpleContent 修复了它。
    • @CrBruno 最好为此打开一个专门的 SO 问题。随意在 cmets 中链接到它(并指向这个讨论)
    【解决方案3】:

    我知道它不一样,但它对我有用:

    <xsd:element name="option">
        <xsd:complexType mixed="true">
            <xsd:attribute name="value" use="optional" type="xsd:string"/>
        </xsd:complexType>
    </xsd:element>
    

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 2017-01-15
      • 1970-01-01
      相关资源
      最近更新 更多