c# 读xml文件的集中方法

小火龙果 2010-07-08 11:10:14
本人是个菜鸟 基尼天接触到这个问题 比较头痛 经过努力基本明白了
可能有的人 认为我写的 太小儿科了 我希望这个可以帮助和我一样的菜鸟
<?xml version="1.0" encoding="utf-8"?>
<MESSAGE>
<MESSAGE_HEAD>
<MESSAGE_TYPE>AP2</MESSAGE_TYPE>
<MESSAGE_CREATE_TIME>2010-05-10 14:25:43</MESSAGE_CREATE_TIME>
<SENDER>0908</SENDER>
<RECEIVER>0908000000006</RECEIVER>
</MESSAGE_HEAD>
<MESSAGE_LIST>
<BILL_INFO>
<CUSTOMS_ID>0908</CUSTOMS_ID>
<SHIP_NAME_EN>JIN MAN HE</SHIP_NAME_EN>
<VOYAGE_NO>612E</VOYAGE_NO>
<BILL_NO>DNLJMH0612E800</BILL_NO>
<FREE_FLAG>1</FREE_FLAG>
<PER_OP>99999</PER_OP>
<PER_DATE>2010-05-10 14:25:36</PER_DATE>
<SOURCE_PLACE>
</SOURCE_PLACE>
<DISCHARGE_PLACE>
</DISCHARGE_PLACE>
<NOTE>
</NOTE>
</BILL_INFO>

</MESSAGE_LIST>
</MESSAGE>

这是一个xml文件 c# 怎么能读取到这些标签中的值
方法一:
读到dataset中去 然后按照表进行取值
namespace xml
{
class Program
{

static void Main(string[] args)
{
//server=localhost;database=gongsi;uid=sa;pwd=sa @"Data Source=127.0.0.1\SQLEXPRESS;Initial Catalog=gongsi;Integrated Security=True;Pooling=False"
string connString = "server=localhost;database=gongsi;uid=sa;pwd=sa";
DataSet ds = new DataSet();
//读进dataset时候是都城了多张表 这个可以根据自己想去那张表进行选择
ds.ReadXml("E:/AP2-E-81B32E51-7AFE-4417-BABB-D105A388A6E0.xml");

DataTable dt = ds.Tables["BILL_INFO"];

string CUSTOMS_ID = dt.Rows[0]["CUSTOMS_ID"].ToString();

string SHIP_NAME_EN = dt.Rows[0]["SHIP_NAME_EN"].ToString();

//行号 和要取的属性名称
string VOYAGE_NO = dt.Rows[0]["VOYAGE_NO"].ToString();
string BILL_NO = dt.Rows[0]["BILL_NO"].ToString();
string FREE_FLAG = dt.Rows[0]["FREE_FLAG"].ToString();
string PER_OP = dt.Rows[0]["PER_OP"].ToString();
string PER_DATE = dt.Rows[0]["PER_DATE"].ToString();
string SOURCE_PLACE = dt.Rows[0]["SOURCE_PLACE"].ToString();
string DISCHARGE_PLACE = dt.Rows[0]["DISCHARGE_PLACE"].ToString();
string NOTE = dt.Rows[0]["NOTE"].ToString();

方法二
最笨的方法 就是 一个一个节点的去取
类似:
XmlReader xr = XmlReader.Create(path);
xr.ReadStartElement("MESSAGE_LIST");
xr.ReadStartElement("BILL_INFO");
xr.ReadStartElement("CUSTOMS_ID");
Console.WriteLine("CUSTOMS_ID节点的内容是:");
Console.WriteLine(xr.ReadString());
xr.ReadEndElement();

xr.ReadStartElement("SHIP_NAME_EN");
Console.WriteLine("SHIP_NAME_EN节点的内容是:");
Console.WriteLine(xr.ReadString());
xr.ReadEndElement();

xr.ReadEndElement();
xr.ReadEndElement();

方法三
通过XmlTextReader之类的方法进行取值
类似:
XmlTextReader xtr = new XmlTextReader(path);

xtr.Read();

while (xtr.Read())
{
xtr.MoveToElement();
Console.WriteLine("name:" + xtr.Name);
Console.WriteLine("base url:" + xtr.BaseURI);
Console.WriteLine("local name:" + xtr.LocalName);
Console.WriteLine("attriribute count:" + xtr.AttributeCount.ToString());
Console.WriteLine("depth:" + xtr.Depth.ToString());
Console.WriteLine("line number:" + xtr.LineNumber.ToString());
Console.WriteLine("node type:" + xtr.NodeType.ToString());
Console.WriteLine("attribute cout:" + xtr.Value.ToString());
}
根据这些属性可以取到需要的东西
然后用xtr.MoveToElement();移向像下一条


希望能帮助到和我一样迷茫过的菜鸟们



}
}
}
...全文
201 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzyhuian06142 2010-07-09
  • 打赏
  • 举报
回复
mark
小火龙果 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuyazhe 的回复:]
er...
仔细看了帖子。恩。支持楼主分享。非常好。
如果是我。估计就用正则取了...
[/Quote]
恩 我会 你能写个小例子吗 我也行学习学习
robin521 2010-07-09
  • 打赏
  • 举报
回复
用switch(node t)
这种方式效率可能高一些。详细可以搜索一下李天平兄的文章 。
兔子-顾问 2010-07-09
  • 打赏
  • 举报
回复
er...
仔细看了帖子。恩。支持楼主分享。非常好。
如果是我。估计就用正则取了...
兔子-顾问 2010-07-09
  • 打赏
  • 举报
回复
DataTable dt = new DataTable();
dt.ReadXML("文件");
访问对应的行列即可。
zhengqian529 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bancxc 的回复:]
XMLDocument doc = doc.Load(@"e:\text.xml");

function f(XMLNODE node)
{
if(node.childNodes.Length==0)
document.WriteLine(node.InnerText)
else
{
foreach(XMLNODE n in node.childNodes)
……
[/Quote]

up
Jellyfancy 2010-07-09
  • 打赏
  • 举报
回复
应该是先load
Jellyfancy 2010-07-09
  • 打赏
  • 举报
回复
一般都是先download再读吧。。
bancxc 2010-07-08
  • 打赏
  • 举报
回复
XMLDocument doc = doc.Load(@"e:\text.xml");

function f(XMLNODE node)
{
if(node.childNodes.Length==0)
document.WriteLine(node.InnerText)
else
{
foreach(XMLNODE n in node.childNodes)
{
f(n);
}
}

}

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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