2 ijunxiong ijunxiong 于 2016.01.18 16:49 提问

从webservice获取成功的xml如何转成对象

如,webservice定义return System.Data.DataTable对象,
在浏览器端获取到xmlhttp对象,//xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
接收到 xmlhttp.responseText 为
-----------------
<?xml version="1.0" encoding="utf-8"?>

soap:Body




xs:complexTypexs:complexTypexs:sequence

/xs:sequence/xs:complexType/xs:element/xs:choice/xs:complexType/xs:element/xs:schema

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">

 <DocumentElement xmlns="">


b145 2
b2
60 name22

 </DocumentElement>
</diffgr:diffgram>



/soap:Body
/soap:Envelope

----------------
说明返回结果为,函数为 GetDt2 的 DataTable对象,有两行(b1,b2) 两列(sdfs1,sdfs2)
表名为rr1,
但它在浏览器端以xml形式展示,或者 xmlhttp.responseText 或者 xmlhttp.responseXML
或者xmlhttp对象,,问题就是,怎么才能将 webservice返回的xml转成对象,

ps:
记得ajax的返回结果是可以直接变成对象的,
而webservice允许 WebMethod 定义为返回对象类型,却在端获取只能是xml,还是说开放的接口有限制,要自己写转换函数??

5个回答

91program
91program   Ds   Rxr 2016.01.18 16:57

从 XML 标识语言转在对象,应该没有标准的接口。需要自己根据 XML 自定义的标识来生成生成的对象。

91program
91program 回复ijunxiong: 应该有?这个我不确定。
接近 2 年之前 回复
ijunxiong
ijunxiong 那对于常用的DataTable DataSet 也应该有统一的转换代码吧?
接近 2 年之前 回复
ijunxiong
ijunxiong   2016.01.18 16:53

代码好像被改了,
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetDt2Response xmlns="http://tempuri.org/">
<GetDt2Result>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="rr1" msdata:UseCurrentLocale="true">
<xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="rr1"><xs:complexType><xs:sequence>
<xs:element name="sdfs1" type="xs:string" minOccurs="0" /><xs:element name="sdfs2" type="xs:string" minOccurs="0" />
</xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema>

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">

 <DocumentElement xmlns="">

<rr1 diffgr:id="rr11" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<sdfs1>b1</sdfs1><sdfs2>45 2</sdfs2></rr1>
<rr1 diffgr:id="rr12" msdata:rowOrder="1" diffgr:hasChanges="inserted"><sdfs1>b2</sdfs1>
<sdfs2>60 name22</sdfs2></rr1>

 </DocumentElement>
</diffgr:diffgram>

</GetDt2Result>
</GetDt2Response>
</soap:Body>
</soap:Envelope>

oyljerry
oyljerry   Ds   Rxr 2016.01.18 16:58

需要你的可以序列化,反序列化等。然后就可以用字符串等

ijunxiong
ijunxiong 不是很明白
接近 2 年之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.01.18 17:47

解析xml不就行了吗?,,

ijunxiong
ijunxiong xsd的解析不懂怎么写,好像挺复杂的
接近 2 年之前 回复
ijunxiong
ijunxiong   2016.01.20 16:18

解析是通用的吗,还是一种对象,一种写法?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!