【问题标题】:XML Schema Simple and Complex Element alternativelyXML Schema Simple 和 Complex Element
【发布时间】:2013-04-29 22:57:21
【问题描述】:

我正在实现一个 XML Schema 模型,但我不知道如何做一个特定的限制......

一个 xml 元素有时显示为简单元素,有时显示为复杂元素,如下所示:

<A>
   <Element>hello</Element>
</A>

或者

<A>
   <Element name="dsa"/>
</A>

是否可以断言某些元素在 XML Schema 中既可以作为简单元素也可以作为复杂元素出现?

提前谢谢

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    您可以声明一个元素同时具有简单的内容(例如字符串)和属性:

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

    但您不能声明元素必须具有简单内容或复杂内容(属性),但不能同时具有两者 - 例如这是有效的:

    <Element name="dsa">Hello</Element>
    

    【讨论】:

      【解决方案2】:

      没有什么比简单元素或复杂元素更重要的了。您上面的元素表示表明,如果您的 &lt;Element&gt; 标记具有值,那么它将显示类似于

      &lt;Element&gt;Hello&lt;/Element&gt;

      如果它确实有任何值,那么它会显示带有自关闭标签,如

      &lt;Element/&gt;

      但我很好奇name="dsa" 属性是如何添加到&lt;Element&gt; 元素的。你能提供更清楚的细节吗?如果您使用 PHP 生成 XML 模式,那么 saveXML(,LIBXML_NOEMPTYTAG) 中有第二个参数,而 LIBXML_NOEMPTYTAG 表示始终生成完整元素,无论它是否为空

      &lt;Element&gt;Hello&lt;/Element&gt;&lt;Element&gt;&lt;/Element&gt;

      【讨论】:

      • 我没有生成 XML... 我得到了一个 xml 文件,我必须为其编写架构。就这样。我只是不能说一个元素要么具有属性要么具有文本,而不是两者兼有。我总是使用非确定性模型。
      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2011-07-24
      • 2020-04-27
      相关资源
      最近更新 更多