这是我的Xml文件
<Test>
<Detail>
<name id="123" age="1">Abc</name>
<lastname>cd</lastname>
</Detail>
</Test>
这是我的对应XSD文件,可以使用http://xmlgrid.net/xml2xsd.html
生成<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- XML Schema Generated from XML Document on Thu Jun 08 2017 22:08:05 GMT+0530 (India Standard Time) -->
<!-- with XmlGrid.net Free Online Service http://xmlgrid.net -->
<xs:element name="Test">
<xs:complexType>
<xs:sequence>
<xs:element name="Detail">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string">
<xs:complexType>
<xs:attribute name="id" type="xs:int"></xs:attribute>
<xs:attribute name="age" type="xs:int"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="lastname" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
当我尝试在SQL Server中创建Schema时
CREATE XML SCHEMA COLLECTION TestSchema
AS'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- XML Schema Generated from XML Document on Thu Jun 08 2017 22:08:05 GMT+0530 (India Standard Time) -->
<!-- with XmlGrid.net Free Online Service http://xmlgrid.net -->
<xs:element name="Test">
<xs:complexType>
<xs:sequence>
<xs:element name="Detail">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string">
<xs:complexType>
<xs:attribute name="id" type="xs:int"></xs:attribute>
<xs:attribute name="age" type="xs:int"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="lastname" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>'
我收到错误
Msg 2305, Level 16, State 1, Line 1
Element or attribute type specified more than once. Location: '/*:schema[1]/*:element[1]/*:
complexType[1]/*:sequence[1]/*:element[1]/*:
complexType[1]/*:sequence[1]/*:element[1]/*:
complexType[1]'.
当我删除&lt; xs:element name =“name”type =“xs:string”&gt;中的 type =“xs:string”时我可以成功创建我的架构而不会出错。
但是在验证我的架构时,我得到了错误
declare @x XML(TestSchema)
begin try
select @x='<?xml version="1.0" encoding="utf-8"?>
<Test>
<Detail>
<name id="123" age="1">Abc</name>
<lastname>cd</lastname>
</Detail>
</Test>'
end try
begin catch
print Error_Message()
end catch
任何人都可以帮我解决这个问题吗?
提前致谢,Jayendran
答案 0 :(得分:0)
在XSD中,您可以使用xs:complexType
和xs:simpleContent
来同时允许同一元素的属性和内容:
<xs:element name="name">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:int"></xs:attribute>
<xs:attribute name="age" type="xs:int"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>