2014-11-05 52 views
2

我试图创建一个XML模式来验证以下xml结构。包含非空字符串和元素的混合内容complexType的XML模式

<ul> 
    <li>123 
     <ul> 
      <li>A</li> 
      <li>B</li> 
      <li>C</li> 
     </ul> 
    </li> 
</ul> 

我想它如果“123”的文本内容丢失或仅是空白失败。

下面的模式就我所知。它坚持正好3个非空列表元素。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="ul"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="li"> 
      <xs:complexType mixed="true"> 
      <xs:sequence> 
       <xs:element name="ul"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element type="nonEmptyString" name="li" maxOccurs="3" minOccurs="3" /> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:simpleType name="nonEmptyString"> 
     <xs:restriction base="xs:string"> 
      <xs:minLength value="1"/> 
      <xs:pattern value="(\s*[^\s]\s*)+"></xs:pattern> 
     </xs:restriction> 
    </xs:simpleType>  
</xs:schema> 

我从In XML Schema, can mixed content restrict the type of the text?猜测,这可能是不可能的,但我想我会问无论如何万一有一个解决方法。

回答

2

如果你只想要字母大写或小写变化

<xs:pattern value="(\s*[^\s]\s*)+"></xs:pattern> 

相关问题