Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在XML模式中将xsi:type定义为属性?_Xml_Xsd - Fatal编程技术网

如何在XML模式中将xsi:type定义为属性?

如何在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

我有一个XML,我想为它编写一个模式定义。问题是我不知道如何将xsi:type定义为属性。以下是XML元素:

<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”不匹配。