最近在学习快递100网站的查询快递状态功能,API返回的是xml格式的字符串.想把它转化为datatable形式存入自己的数据库里,C#代码应如何写呢?返回的字符串内容如下:
<xml>
<nu>130005989722</nu>
<message>ok</message>
<ischeck>1</ischeck>
<com>tiantian</com>
<condition>F00</condition>
<status>1</status>
<state>3</state>
<data>
<time>2012-12-25 18:50:22</time>
<context>已签收,签收人是【草签】</context>
</data>
<data>
<time>2012-12-25 11:33:27</time>
<context>【大桥镇】的派件员【皖BJ8172】正在派件</context>
</data>
<data>
<time>2012-12-24 18:43:29</time>
<context>由【扬中】发往【泰州分拨中心】</context>
</data>
</xml>
先行感谢各位的指教,拜谢!xmlc#数据库
<xml>
<nu>130005989722</nu>
<message>ok</message>
<ischeck>1</ischeck>
<com>tiantian</com>
<condition>F00</condition>
<status>1</status>
<state>3</state>
<data>
<time>2012-12-25 18:50:22</time>
<context>已签收,签收人是【草签】</context>
</data>
<data>
<time>2012-12-25 11:33:27</time>
<context>【大桥镇】的派件员【皖BJ8172】正在派件</context>
</data>
<data>
<time>2012-12-24 18:43:29</time>
<context>由【扬中】发往【泰州分拨中心】</context>
</data>
</xml>
先行感谢各位的指教,拜谢!xmlc#数据库
解决方案 »
- 这段socket server端为何不能读取第二个连接的数据呢
- 字符串转换日期类型的问题
- C#里我继承了BUTTON一个类 BUTTONARRY
- 组合物体变形问题(全部分数了)
- 关于类的地址
- 在C# asp.net 中怎么发邮件?
- TreeView的上下文菜单问题
- 使用方法的输出参数出现的问题: 名称“Rank”在类或命名空间“AgentSystem.Agent.ShoppingCart”中不存在
- to wd_318(初学者.net),winform,DataGrid中的数据无效时,怎样设置焦点不让离开?
- 本想构造一个insert语句,没想到用户输入内容中包含“单引号”,这个问题怎么解决?
- ConfigurationSettings.AppSettings 过期
- C#新手
/// <summary>
/// 将XML转换成DataSet
/// </summary>
/// <param name="xmlData"></param>
/// <returns></returns>
private static DataSet ConvertXMLToDataSet(string xmlData)
{
StringReader stream = null;
XmlTextReader reader = null;
try
{
DataSet xmlDS = new DataSet();
stream = new StringReader(xmlData);
reader = new XmlTextReader(stream);
xmlDS.ReadXml(reader);
return xmlDS;
}
catch (Exception ex)
{
string strTest = ex.Message;
return null;
}
finally
{
if (reader != null)
{
reader.Close();
}
}
}
#endregion
您好,我测试过这种,如果xmlData直接用我上面贴的<xml>...</xml>内容,会错误,提示:路径中具有非法字符。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentException: 路径中具有非法字符。您帮忙测试一下,有这个问题吗?
参考:
http://blog.csdn.net/whuyi/article/details/6230118
你提供的XML明显是非常规的,要专门写一个对应的解析,可以参考下4楼网址。
好的.我基本功太差了,很多东西都不了解,搞定了就给分,谢谢!另外找到一个类似的,不知道有没有参考意义...void scDownloadString_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
//throw new NotImplementedException();
string returnValue = e.Result ;
//this is source demo returnValue "{\"message\":\"ok\",\"status\":\"1\",\"link\":\"http://kuaidi100.com/chaxun?com=yuantong&nu=1780371398\",\"state\":\"3\",\"data\":[{\"time\":\"2012-03-19 15:02:42\",\"context\":\"河南省南阳市白河南/PDA正常签收扫描/签收人:孟星星 \"}]}" string
//source demo2 e.Result = "<xml><message>ok</message><status>1</status><link>http://kuaidi100.com/chaxun?com=yuantong&nu=1780371398</link><state>3</state><data><time>2012-03-19 15:02:42</time><context>河南省南阳市白河南/PDA正常签收扫描/签收人:孟星星 </context></data></xml>"
Dictionary<string,string> dictionary = new Dictionary<string, string>();using (XmlReader xmlReader=XmlReader.Create(new StringReader(returnValue)))
{
while (xmlReader.Read())
{
//if this is the first node and name ==xml
if (xmlReader.IsStartElement()&&(xmlReader.LocalName=="xml"))
{
using (XmlReader itemReader=xmlReader.ReadSubtree())
{
while (itemReader.Read())
{
//如果找到一个节点就开始读取其中内容
if (itemReader.NodeType==XmlNodeType.Element)
{
string nodeName = itemReader.Name;
itemReader.Read();
//提取内容
if (itemReader.NodeType==XmlNodeType.Text)
{
switch (nodeName)
{
case "message":
dictionary.Add("message",itemReader.Value);break;
case "status":
dictionary.Add("status", itemReader.Value);break;
case "link":
dictionary.Add("link", itemReader.Value); break;
case "state":
dictionary.Add("state", itemReader.Value); break;
case "time":
dictionary.Add("time", itemReader.Value); break;
case "context":
dictionary.Add("context", itemReader.Value); break;
default:
break;
}
}
}
}
}
}
}}
string str=null;
dictionary.TryGetValue("context", out str);
this.txtBlockNews.Text = str;}
}
}
xd.Load("xml格式的字符串");
XmlElement xmlRoot = xd.DocumentElement;
XmlNode node = xmlRoot.SelectSingleNode("data");
string timeval = "";
string context = "";
foreach (XmlNode xn in node.ChildNodes)
{
if (xn.Name == "time")
timeval = xn.InnerText;
if (xn.Name == "context")
{
context = xn.InnerText;
//插入方法就行了
}
}