<xsd:element name="category">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute default="http://schemas.xmlsoap.org/soap/actor/next" ref="soapenv:actor" use="optional"/>
<xsd:attribute ref="soapenv:mustUnderstand" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
元素名称是“category”,我希望它始终默认为值“ABC”
上面的定义在Soap UI中生成如下元素:
<urn:category soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="?">?</urn:category>
我需要的是元素应该生成为
<urn:category soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="?">ABC</urn:category>
为实现这一目标,我尝试了
<xsd:element name="category" fixed="ABC">
<xsd:element name="category" default="ABC">
以上都不能生成值为
的元素我在这里做错了吗?请帮忙。
感谢。
我怎样才能做到这一点?
答案 0 :(得分:0)
从XSD的角度来看,您尝试指定默认值或固定值的方法是正确的方法,它们似乎对我很好。也就是说,如果我创建一个包含您提供的元素声明的模式文档,并在fixed="ABC"
元素上使用附加属性xsd:element
,那么文档<category>ABC</category>
对模式和文档有效<category>abc</category>
不是,并且引发了关于价值与所需价值不匹配的投诉&#39; ABC&#39;。
要明确地说,这是我使用的完整架构文档:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://example.com/soapenv"
elementFormDefault="qualified">
<xsd:import namespace="http://example.com/soapenv"
schemaLocation="complex-default.2.xsd"/>
<xsd:element name="category" fixed="ABC">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute
default="http://schemas.xmlsoap.org/soap/actor/next"
ref="soapenv:actor"
use="optional"/>
<xsd:attribute ref="soapenv:mustUnderstand"
use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:schema>
请注意,soapenv前缀的命名空间名称是我编写的名称;该命名空间引用的模式文档complex-default.2.xsd
是一个简单的占位符,旨在提供模式片段中使用的命名空间中两个属性的无约束定义:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/soapenv"
elementFormDefault="qualified">
<xs:attribute name="actor" type="xs:anyURI"/>
<xs:attribute name="mustUnderstand" type="xs:boolean"/>
</xs:schema>
问题可能在于您的SOAP工具,而不在于您的XSD架构文档。