属性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>
任何想法如何解决这个问题?
答案 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。