我需要使用XSD生成一个简单的XML文件(用户列表),以便可以在Excel(2010+)中导入此XML。这个XML提供的字段是动态的,它取决于用户他想要/需要的字段。列表可能很长,我有大约40个字段供用户选择。
Excel基于XML架构构建其表列。如果第一行缺少字段,则会以错误的顺序将这些字段添加到表中。所以需要一个架构!由于XML基于请求,因此XML模式必须内联。
根据我能找到的关于内联架构的每篇文章,我创建了以下内容..但它会崩溃并烧掉每个验证器。 Excel也不会接受它。
<?xml version="1.0" encoding="UTF-8"?>
<users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="#local">
<xs:schema id="local" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="users">
<xs:complexType>
<xs:sequence>
<xs:any processContents="skip" namespace="http://www.w3.org/2001/XMLSchema" minOccurs="0" maxOccurs="1"/>
<xs:element ref="user" minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="user">
<xs:complexType>
<xs:sequence>
<xs:element ref="firstname" minOccurs='0' maxOccurs='1'/>
<xs:element ref="lastname" minOccurs='0' maxOccurs='1'/>
<xs:element ref="phone" minOccurs='0' maxOccurs='1'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="phone" type="xs:string"/>
</xs:schema>
<user>
<lastname>Doe</lastname>
<phone>123456789</phone>
</user>
<user>
<firstname>John</firstname>
<lastname>Something</lastname>
</user>
<user>
<firstname>Jesus</firstname>
<lastname>Christ</lastname>
<phone>987654321</phone>
</user>
</users>
我到底做错了什么?看起来很简单......