xml - 空字符串属性值xsd

时间:2016-10-09 20:06:22

标签: xml xsd

属性match可能并不总是包含值,它应该允许空字符串:

<template mode="on" match="">
</template>

要验证以前的代码,我使用以下xsd 这是我的xsd:

<xs:element name="template">
    <xs:complexType>
        <xs:sequence>
            <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
        </xs:sequence>
        <xs:attribute type="xs:string" name="mode" use="optional"/>
        <xs:attribute name="match" use="optional">
            <xs:simpleType>
                <xs:union memberTypes="xs:string emptyString"/>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:element>
<xs:simpleType name="emptyString">
        <xs:restriction base="xs:string">
            <xs:length value="0"/>
        </xs:restriction>
</xs:simpleType>

在针对xsd的验证过程中,我收到以下错误消息:  no viable alternative at input ' <EOF> '

以下代码未向我显示任何错误。

<template mode="on" match="aaa">
</template>

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

假设您的完整XSD如下,

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="template">
    <xs:complexType>
      <xs:sequence>
        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
      </xs:sequence>
      <xs:attribute type="xs:string" name="mode" use="optional"/>
      <xs:attribute name="match" use="optional">
        <xs:simpleType>
          <xs:union memberTypes="xs:string emptyString"/>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="emptyString">
    <xs:restriction base="xs:string">
      <xs:length value="0"/>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>

然后,您的XML对您的XSD有效,包括template/@match=""template/@match="aaa"。您的XML或XSD都没有错。

但是请注意,xs:string可能已经为空而没有额外的xs:union emptyString部分。

另请注意,您的错误消息看起来不像是由常见的验证XML / XSD解析器生成的错误消息。我怀疑你的消息实际上来自另一个程序,或者你未能提出你的问题的真正MCVE。