有以下XML:
<dict >
<key>key1</key>
<string>bla-bla</string>
<key>key2</key>
<int>123</int>
<key>key3</key>
<string>blah-blah</string>
<!-- key... -->
<!-- string or int tag -->
<!-- the pair repeats several times -->
</dict>
我正在尝试为此文件结构创建一个XSD,目前我使用以下代码:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Test"
targetNamespace="http://tempuri.org/Test.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/Test.xsd"
xmlns:mstns="http://tempuri.org/Test.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:complexType name ="objectType">
</xs:complexType>
<xs:complexType name ="stringType" >
<xs:complexContent>
<xs:extension base ="objectType">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name ="intType">
<xs:complexContent>
<xs:extension base ="objectType">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name ="dictType">
<xs:sequence minOccurs ="0" maxOccurs ="unbounded">
<xs:element type ="xs:string" name ="key"/>
<xs:element ref ="object" />
</xs:sequence>
</xs:complexType>
<xs:element name ="object" type ="objectType" abstract ="true"/>
<xs:element name ="string" type ="stringType" substitutionGroup="object" />
<xs:element name ="int" type ="intType" substitutionGroup="object"/>
<xs:element name ="dict" type ="dictType" />
</xs:schema>
这个架构让我生成以下xmls
<?xml version="1.0" encoding="utf-8"?>
<dict xmlns="http://tempuri.org/Test.xsd">
<key>key1</key>
<string />
<key>key2</key>
<string />
<key>key3</key>
<int />
</dict>
在这个阶段我找不到使用<int>
和<string>
标签提供某些数据的方法。
当我写<int>1</int>
之类的东西时。我看到了错误消息。 “元素不能包含文本。内容模型为空”
请问您是否可以按整数填充<int>
标记内容,并按字符串标记<string>
标记内容?如何?
提前谢谢!
答案 0 :(得分:1)
您是为现有XML还是新XML设计XSD。因为如果你设计一个新的,我会考虑定义一个入口节点。我相信这样可以更容易地定义您的结构,并且生成分类会更好。
<dict>
<entry>
<key>key1</key>
<string>bla-bla</string>
</entry>
<entry>
<key>key2</key>
<int>123</int>
</entry>
<entry>
<key>key3</key>
<string>blah-blah</string>
</entry>
</dict>
编辑:我建议的XSD将是:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://yaugen.com/schemas" xmlns:yaugen="http://yaugen.com/schemas" elementFormDefault="qualified">
<xs:element name="dict">
<xs:complexType>
<xs:sequence>
<xs:element name="entry" maxOccurs="unbounded" minOccurs="0" type="yaugen:Entry">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Entry">
<xs:sequence>
<xs:element type="xs:string" name="key"/>
<xs:choice>
<xs:element type="xs:string" name="string" />
<xs:element type="xs:byte" name="int" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:schema>
答案 1 :(得分:0)
您已尝试将字符串和int元素定义为具有复杂类型,我无法看到其原因。显而易见的是定义
<xs:element name="string" type="xs:string" substitutionGroup="object"/>
<xs:element name="int" type="xs:int" substitutionGroup="object"/>
但是,为此,必须使用xs:anyType。
类型定义对象