急救:http协议post方式传xml数据流,怎样解析后返回数据流?

fwiw12 2009-03-31 12:47:01
请假各位大师:我对xml不入门,想知道asp.net(c#)下怎么开发关于xml数据流解析的问题,最好能给代码示例学习,十分感谢!

我想实现的是:
A方以http协议的方式将xml信息post给B方的server端,
<nameid id='aa'>
<v1>000</v1>
<w2>
<t1 >1234567890</t1>
</w2>
</nameid>

B方的server端接到此xml后,解析出t1的值1234567890,并返回给A方一些xml格式的数据,
<ok id='b1'>
<h>kkk1</h>
</ok>
<ok id='b2'>
<h>kkk2</h>
</ok>


请问:我作为B方,在.net(c#)下应该开发哪些内容?最好能给详细的示例代码学习,再次感谢!
...全文
881 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lfywy 2009-03-31
  • 打赏
  • 举报
回复
给你个示例代码:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Xml;
using System.Xml.XPath;

public partial class NewReports_CZWSINOUT_Report_CGKSaveData : System.Web.UI.Page
{
protected string[,] data;
protected string[] data1;
protected string[] data2;
protected string[] data0;
protected int item;
protected string connstr;
protected int version = 0;
protected void Page_Load(object sender, EventArgs e)
{
connstr = System.Configuration.ConfigurationSettings.AppSettings["sql2005"];
if (!IsPostBack)
{
GetXMLInfo();
}
}

/// <summary>
/// 得到传来的XML信息
/// </summary>
private void GetXMLInfo()
{
//取得XML文件
Response.Expires = -1000;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Request.InputStream);
//xmlDoc.Save(Server.MapPath(".\\DataSaved6.xml"));
//xmlDoc.Load(Server.MapPath(".\\DataSaved6.xml"));
//解析返回的XML文件
XmlNodeList xmlList = xmlDoc.SelectSingleNode("bqTree").ChildNodes;
int max = (new SqlDataAccess(connstr)).GetMaxValue("SELECT version FROM tRun_FactoryCheckInfo_CGK ORDER BY version DESC") + 1;
DateTime nowtime = System.DateTime.Now;
//先拿到相关的信息
//for (int i = 0; i < xmlList.Count - 2; i++)
//{
// data0 = xmlList.Item(i).InnerText.Split(new char[1] { '|' });
// for (int j = 0; j < 27; j++)
// {
// data[i, j] = data0[j];
// }
//}
data1 = xmlList.Item(xmlList.Count - 2).InnerText.Split(new char[1] { '|' });
data2 = xmlList.Item(xmlList.Count - 1).InnerText.Split(new char[1] { '|' });
string FACT_ID = "";
string FACT_NAME_j = "";
string strqrt0 = "insert into tRun_FactoryCheckInfo_CGKJL (version, DATE, InTime)values('" + max + "','" + GetDateTime(data1[1].Trim()) + "','" + nowtime + "')";
(new SqlDataAccess(connstr)).DataCom(strqrt0);
for (int i = 0; i < xmlList.Count - 2; i++)
{
data0 = xmlList.Item(i).InnerText.Split(new char[1] { '|' });
DataTable dt = (new SqlDataAccess(connstr)).RunSqlDT("SELECT OBJECTID, FACT_ID, FACT_NAME, FACT_NAME_j, In_Date, In_Dist FROM TDRAI_SEWAGEFACT WHERE (FACT_NAME = '" + data0[1].Trim() + "')");
if (dt.Rows.Count == 1)
{
FACT_ID = dt.Rows[0][1].ToString();
FACT_NAME_j = dt.Rows[0][3].ToString();
}
string strqrt1 = "insert into tRun_FactoryCheckInfo_CGK (version, ID, UNIT, DATE, IsUse, VersionId)values('" + max + "','" + Convert.ToInt32(i + 1) + "','" + FACT_NAME_j.Trim() + "','" + GetDateTime(data1[1].Trim()) + "','1','1')";
string strqrt2 = "insert into tRun_FactoryCheckSawege_CGK (version, JCBSDM, FACT_ID,DATE, FACT_BOD_IN, FACT_BOD_OUT, FACT_SS_IN, FACT_SS_OUT, FACT_COD_IN, FACT_COD_OUT, FACT_NH3N_IN, FACT_NH3N_OUT, FACT_TP_IN, FACT_TP_OUT, FACT_PH_IN, FACT_PH_OUT, FACT_CODHL_IN, FACT_CODHL_OUT, FACT_ANDAN_IN, FACT_ANDAN_OUT, FACT_ZP_IN, FACT_ZP_OUT, FACT_ZD_IN, FACT_ZD_OUT, FACT_SDU_IN, FACT_SDU_OUT, TSWNHSL, PWL, NYANG, CYDATE, IsUse, VersionId)values('" + max + "','" + Convert.ToInt32(i + 1) + "','" + FACT_ID.Trim() + "','" + GetDateTime(data1[1].Trim()) + "','" + GetDecimal(data0[2].Trim()) + "','" + GetDecimal(data0[3].Trim()) + "','" + GetDecimal(data0[4].Trim()) + "','" + GetDecimal(data0[5].Trim()) + "','" + GetDecimal(data0[6].Trim()) + "','" + GetDecimal(data0[7].Trim()) + "','" + GetDecimal(data0[8].Trim()) + "','" + GetDecimal(data0[9].Trim()) + "','" + GetDecimal(data0[10].Trim()) + "','" + GetDecimal(data0[11].Trim()) + "','" + GetDecimal(data0[12].Trim()) + "','" + GetDecimal(data0[13].Trim()) + "','" + GetDecimal(data0[14].Trim()) + "','" + GetDecimal(data0[15].Trim()) + "','" + GetDecimal(data0[16].Trim()) + "','" + GetDecimal(data0[17].Trim()) + "','" + GetDecimal(data0[18].Trim()) + "','" + GetDecimal(data0[19].Trim()) + "','" + GetDecimal(data0[20].Trim()) + "','" + GetDecimal(data0[21].Trim()) + "','" + GetDecimal(data0[22].Trim()) + "','" + GetDecimal(data0[23].Trim()) + "','" + GetDecimal(data0[24].Trim()) + "','" + GetDecimal(data0[25].Trim()) + "','" + data0[26].Trim() + "','" + GetDateTime(data0[27].Trim()) + "','1','1')";
(new SqlDataAccess(connstr)).DataCom(strqrt1);
(new SqlDataAccess(connstr)).DataCom(strqrt2);
}
}

/// <summary>
/// 判断是否为空和类型转换
/// </summary>
/// <param name="a">参数值</param>
/// <returns>得到泥质检测名称字符串</returns>
private DateTime GetDateTime(string a)
{
DateTime b = Convert.ToDateTime("1900-1-1");
if (a.Equals("") || a == null)
{
b = Convert.ToDateTime("1900-1-1");
}
else
{
try
{
b = Convert.ToDateTime(a);
}
catch
{
b = Convert.ToDateTime("1900-1-1");
}
}
return b;
}

/// <summary>
/// 判断是否为空和类型转换
/// </summary>
/// <param name="a">参数值</param>
/// <returns>得到泥质检测名称字符串</returns>
private decimal GetDecimal(string a)
{
decimal b = 0;
if (a.Equals("") || a == null)
{
b = 0;
}
else
{
try
{
b = Convert.ToDecimal(a);
}
catch
{
b = 0;
}
}
return b;
}

/// <summary>
/// 判断是否为空和类型转换
/// </summary>
/// <param name="a">参数值</param>
/// <returns>得到泥质检测名称字符串</returns>
private decimal GetInt(string a)
{
int b = 0;
if (a.Equals("") || a == null)
{
b = 0;
}
else
{
try
{
b = Convert.ToInt32(a);
}
catch
{
b = 0;
}
}
return b;
}
}


西安风影 2009-03-31
  • 打赏
  • 举报
回复
using System.Xml; 
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument dom = new XmlDocument ();
dom.Load ( Request.InputStream );
XmlNode node = doc.DocumentElement;
XmlNode t1Node = node.SelectSingleNode ( "//w2/t1" );
String result = t1Node.InnerXml;//1234567890你要的结果

String strXML = "<?xml version='1.0' encoding='GB2312'?><ok id='b1'><h>kkk1</h></ok><ok id='b2'><h>kkk2</h></ok>";
Response.ContentType = "text/xml";
Response.CharSet = "gb2312";
Response.Write(strXML);
Response.End();
}
西安风影 2009-03-31
  • 打赏
  • 举报
回复
using System.Xml;
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument dom = new XmlDocument ();
dom.Load ( Request.InputStream );
XmlNode node = doc.DocumentElement;
XmlNode t1Node = node.SelectSingleNode ( "//w2/t1" );
String result = t1Node.InnerXml;//1234567890你要的结果

}
fwiw12 2009-03-31
  • 打赏
  • 举报
回复
大师能够说的详细吗
orain 2009-03-31
  • 打赏
  • 举报
回复
如果只是简单的做一个,数据量不大,看一下这个类就可以了:System.Xml.XmlDocument。如果数据比较大的话,就用System.Xml.XmlReader 和 System.Xml.XmlWriter,另外,弄清楚一些基本概念如节点、元素、属性、文本节点等,还有 XPath,大概就差不多了吧,其它的用到了再具体看下。
sunshine_anycall 2009-03-31
  • 打赏
  • 举报
回复
http方式传输xml文件
可以直接用web service了
hy_lihuan 2009-03-31
  • 打赏
  • 举报
回复
其实在.net里面开发web service只要会序列化类,就可以传递给其他的系统了;其他系统的解析也是通过这个类来调用的;
所以和操作xml没有太大的直接关系
popeyepower 2009-03-31
  • 打赏
  • 举报
回复
可以用字符串的形式发送, 也可以序列化以后发送. 用得更多的是后者. 具体查MSDN有例子.
如果是两个server的通信, 用XML可以.
如果是客户端与SERVER端的通信, 用JASON原生格式最好.

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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