我是XML模式的新手...我有一个xsd模式文件:-
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.anirban.com/v1"
xmlns:tns="http://www.anirban.com/v1" elementFormDefault="qualified">
<complexType name="InputRequest">
<sequence>
<element name="Name" maxOccurs="unbounded" type="string">
</element>
<element name="Url" type="anyURI" maxOccurs="1" minOccurs="0">
</element>
<element name="Employee">
<complexType>
<sequence>
<element name="VehicleList" maxOccurs="unbounded" type="string" />
<element name="EmployeeName" type="string" default="Anirban" />
</sequence>
</complexType>
</element>
</sequence>
</complexType>
<complexType name="OutputResponse">
<sequence>
<element name="ResponseCode" type="string"></element>
</sequence>
</complexType>
<element name="getInputRequest" type="tns:InputRequest"></element>
<element name="getOutputResponse" type="tns:OutputResponse"></element>
</schema>
用于创建SOAP请求,例如:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.anirban.com/v1">
<soapenv:Header/>
<soapenv:Body>
<v1:getInputRequest>
<!--1 or more repetitions:-->
<v1:Name>Abc</v1:Name>
<v1:Name>Efg</v1:Name>
<!--Optional:-->
<v1:Url>http://localhost:8084/test?wsdl</v1:Url>
<v1:Employee>
<!--1 or more repetitions:-->
<v1:VehicleList>ee</v1:VehicleList>
<v1:VehicleList>ff</v1:VehicleList>
<v1:EmployeeName>Anirban</v1:EmployeeName>
</v1:Employee>
</v1:getInputRequest>
</soapenv:Body>
</soapenv:Envelope>
现在我的问题是,我想在之间添加一个元素,例如:-<v1:Orders>Ord1,Ord2,Ord3</v1:Orders>
将采用逗号分隔的字符串值..那么如何在元素之间添加元素Orders呢?是否可以添加一个元素,该元素将按照complexType的顺序使用逗号分隔的String值?请帮忙 ...
正如holderdarocha所指出的,几乎可以肯定,将元素指定为元素序列会更好:
<v1:Order>Ord1</v1:Order>
<v1:Order>Ord2</v1:Order>
<v1:Order>Ord3</v1:Order>
v1:Orders
如果愿意,可以将它们包装在一个元素中。在这样的事情上,不同的人会有不同的品味。
如果由于某种原因,使单个元素具有一系列原子值确实更好(我实际上暂时不相信它会更好,但是许多人需要从痛苦的经历中学到东西,而不是学习(从别人的痛苦经历中学习),那么它将在XSD和相关工具中更好地工作,以使列表用空格分隔:
<v1:Orders>Ord1 Ord2 Ord3</v1:Orders>
这样,可以将Orders元素声明为简单值列表,并且可以针对类型(整数,日期,IDREF,NCName,您选择的正则表达式定义的标记,...)测试各个值。XSD验证器和下游的模式识别软件将看到一系列简单值,而不是一个。
从XSD的角度来看,使其成为逗号分隔的列表是所有可能的解决方案中最糟糕的。XSD列表类型是用空格分隔的,而不是用逗号分隔的(并且无论世界上的Perl爱好者多么喜欢,也不是用任意正则表达式分隔的),因此XSD验证程序和下游模式感知应用程序都看不到一系列值;他们只会看到一个值,而其词法空间受一个长而复杂的(可能是错误的,除非您比普通程序员更好)正则表达式所约束。如果单个标记应表示整数,日期或其他一些XSD简单类型,则不会对其进行类型验证。如果要限制列表的长度,则只能通过用于验证字符串的正则表达式来实现。另一个出错的机会。
另一方面,如果各个标记没有词法约束,并且您确实真的坚持要使用逗号分隔的列表,而不要使用空格分隔的列表,那么您根本不需要做任何工作:只需将Orders元素声明为xsd即可:细绳。由于XSD不会对逗号进行任何特殊处理,因此无需使用任何模式来对逗号进行巧妙处理。由于标记没有词法约束,因此在任何情况下都无法进行模式操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句