如何读取由web service返回的xml数据?

hong_43 2003-10-21 09:39:45
我在web service中定义了一个对象数组,作为返回类型。它返回的应该是xml格式,我该怎么读取呢?
web service:

namespace Values
{
public class Order
{
public int OrderID;
public double Price;
}

[WebMethod]
public Order[] GetOrders()
{
Order[] myOrder=new Order[2];
myOrder[0]=new Order();
myOrder[0].Price=3333;
myOrder[0].OrderID=3242;
myOrder[1]=new Order();
myOrder[1].Price=8888;
myOrder[1].OrderID=09090;
return myOrder;
}
}

客户端:?
...全文
77 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoyan19811021 2003-10-22
  • 打赏
  • 举报
回复
可以用dataset的readxml方法
swjuhml 2003-10-21
  • 打赏
  • 举报
回复
在客户端添加Web引用后的结果,Order的类结构会自动映射到客户端.
public class Service1 : System.Web.Services.Protocols.SoapHttpClientProtocol {

/// <remarks/>
public Service1() {
this.Url = "http://localhost/NewProj/NewProj_WebService/Service1.asmx";
}

/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetOrders", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public Order[] GetOrders() {
object[] results = this.Invoke("GetOrders", new object[0]);
return ((Order[])(results[0]));
}

/// <remarks/>
public System.IAsyncResult BeginGetOrders(System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GetOrders", new object[0], callback, asyncState);
}

/// <remarks/>
public Order[] EndGetOrders(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((Order[])(results[0]));
}
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")]
public class Order {

/// <remarks/>
public int OrderID;

/// <remarks/>
public System.Double Price;
}

如果直接通过Web调用,返回XML格式如下;
<?xml version="1.0" encoding="utf-8" ?>
- <ArrayOfOrder xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
- <Order>
<OrderID>3242</OrderID>
<Price>3333</Price>
</Order>
- <Order>
<OrderID>9090</OrderID>
<Price>8888</Price>
</Order>
</ArrayOfOrder>
BillTuan 2003-10-21
  • 打赏
  • 举报
回复
这是一个数据集的xml数据在客户端读取的程序,可供参考

服务器端的web service 的web method返回xml串,以ds.getxml()方法即可.

客户端代码示例:
引用microsoft soap toolkit 及xml 3.0

Dim objSoap As New SoapClient
Dim strXml As String

Dim xmlDoc As New Msxml2.DOMDocument
Dim nodeRs As IXMLDOMElement
Dim nodeField As IXMLDOMElement
Dim nodelistRows As IXMLDOMNodeList

Dim rs As New Recordset
Dim l As Long

On Error Resume Next

xmlDoc.async = True

objSoap.ClientProperty("ServerHTTPRequest") = True
objSoap.mssoapinit ("http://localhost/webservicefirst/servicefirst.asmx?WSDL")
xmlDoc.loadXML (objSoap.returnxml("select * from employees where sno<'02001'"))

Set nodeRs = xmlDoc.selectSingleNode("//NewDataSet")
Set nodelistRows = nodeRs.getElementsByTagName("Table")
If nodelistRows.Length = 0 Then
Set DataSource = rs
Exit Function
End If

'NULL值字段无,字段结构信息由其它方法传入为好
For Each nodeField In nodeRs.childNodes(0).childNodes
rs.Fields.Append nodeField.nodeName, adVarWChar, 1000
Next

'增加记录
rs.Open
Dim str As String

For l = 0 To rs.Fields.Count - 1
str = str & "|" & rs(l).Name
Next
For l = 0 To nodelistRows.Length - 1
rs.AddNew
For Each nodeField In nodelistRows(l).childNodes
rs(nodeField.baseName) = nodeField.Text
Next
Next

If Not (rs.EOF Or rs.BOF) Then rs.MoveFirst

Set DataSource = rs
Set objSoap = Nothing
Exit Function
errHandler:
Set objSoap = Nothing
Set DataSource = Nothing
MsgBox Err.Description, vbCritical, "控件错误!"

12,163

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧