如何在XML模式中将xsi:type定义为属性?
我有一个XML,我想为它编写一个模式定义。问题是我不知道如何将xsi:type定义为属性。以下是XML元素:如何在XML模式中将xsi:type定义为属性?,xml,xsd,Xml,Xsd,我有一个XML,我想为它编写一个模式定义。问题是我不知道如何将xsi:type定义为属性。以下是XML元素: <SerializedData xsi:type="xs:double">300.0</SerializedData> 300.0 到目前为止,我的XML架构定义如下所示: <complexType name="SerializedDataType"> <simpleContent> <extension
<SerializedData xsi:type="xs:double">300.0</SerializedData>
300.0
到目前为止,我的XML架构定义如下所示:
<complexType name="SerializedDataType">
<simpleContent>
<extension base="double">
</extension>
</simpleContent>
</complexType>
<SerializedData xsi:type="xs:double">300.0</SerializedData>
我也尝试过像Ian Roberts建议的那样定义它:
<element name="SerializedData"/>
但是,当我使用BPEL设计器对其进行如下初始化时:
<complexType name="SerializedDataType">
<simpleContent>
<extension base="double">
</extension>
</simpleContent>
</complexType>
<SerializedData xsi:type="xs:double">300.0</SerializedData>
300.0
我得到以下警告:
您输入的固定值似乎不是有效的XML(某些类型的固定值需要有效的XML才能正常工作)。它将以文本格式保存
如果我像这样初始化它,则没有警告:
<SerializedData>300.0</SerializedData>
300.0
但问题是,我试图调用的Web服务期望请求SOAP消息包含属性xsi:type=“xs:double”。如何使SOAP请求消息包含它
任何帮助都将不胜感激 您不需要-只需声明没有类型的元素即可
<element name="SerializedData" />
关于问题的第二部分,您的设计器工具是正确的
<SerializedData xsi:type="xs:double">300.0</SerializedData>
xsi:type属性不需要在模式中声明:它是隐式声明的,可以在任何元素上使用。但在一个实例中,它必须是一个有效的QName 如果你写信
<SerializedData xsi:type="xs:double">300.0</SerializedData>
300.0
然后
(a) 要使名称空间格式良好,需要声明“xsi”名称空间
(b) 要使模式有效,还需要声明“xs”名称空间
正如罗伯茨指出的,这意味着你应该写作
<SerializedData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:double">300.0</SerializedData>
300.0
这个帖子中的答案对我来说不是很容易理解,我发现另一个帖子对解决方案有更明确的解释:。谢谢伊恩·罗伯茨的回复。请阅读我编辑的问题。“xsi:type”值必须以“xs:”作为前缀吗?xsi:type可以是架构中定义的任何类型,不需要是内置类型。xsi:type=“double”是否有效?它知道double属于哪个模式吗?xsi:type=“double”只有在您有一个定义了本地名称为“double”的类型的无命名空间模式时才有效。它与XML模式命名空间中的类型“double”不匹配。