最后一百分送了:如何读xml某段里的某个元素的所有值!??

gong_ji 2004-05-12 12:29:52
比如:
<root>
<table>
<evas>
<eva>0</eva>
<eva>1</eva>
<eva>1</eva>
<eva>1</eva>
</evas>
</table>
<table>
<evas>
<eva>0</eva>
<eva>1</eva>
<eva>1</eva>
<eva>1</eva>
</evas>
</table>
......
</root>
=====
如何读取第一个table中的evas中的所有eva值并辅给arraylist!如何读取呢??xml高手指教!!谢谢了
...全文
51 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
marvelstack 2004-05-13
  • 打赏
  • 举报
回复
参考,装在xml到DataSet再处理


using System;
using System.Data;
using System.Collections;
using System.Xml;
using System.IO;
using System.Text;

namespace ZZ
{
/// <summary>
/// ZZConsole 的摘要说明。
/// </summary>
public class ZZConsole
{
[STAThread]
static void Main(string[] args)
{

XmlDocument xdoc= new XmlDocument();
xdoc.Load(@"d:\test.xml");
DataSet ds = CreatDataSet();
XmlNodeList xList = xdoc.SelectNodes("//Item");
foreach(XmlNode xNode in xList)
{
DataRow dr = ds.Tables["Items"].NewRow();
dr["Item"] = xNode.Attributes["Name"].Value;
ds.Tables["Items"].Rows.Add(dr);
}
foreach(DataRow dr in ds.Tables["Items"].Rows)
{
Console.WriteLine(dr["Item"].ToString());
}
Console.ReadLine();
}
public static DataSet CreatDataSet()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable("Items");
DataColumn dc = new DataColumn("Item",typeof(string));
dt.Columns.Add(dc);
ds.Tables.Add(dt);
return ds;
}
}
}
=======================================================
<?xml version="1.0" encoding="utf-8" ?>
<Root>
<Class Name="1">
<Item Name="Item11"/>
<Item Name="Item12"/>
<Item Name="Item13"/>
<Item Name="Item14"/>
</Class>
<Class Name="2">
<Item Name="Item21"/>
<Item Name="Item22"/>
<Item Name="Item23"/>
<Item Name="Item24"/>
</Class>
</Root>
graybelt 2004-05-13
  • 打赏
  • 举报
回复
C;\text.xml

<?xml version="1.0" encoding="gb2312"?>
<root>
<table>
<evas>
<eva>0</eva>
<eva>1</eva>
<eva>1</eva>
<eva>1</eva>
</evas>
</table>
<table>
<evas>
<eva>2</eva>
<eva>2</eva>
<eva>2</eva>
<eva>2</eva>
</evas>
</table>
</root>

----------------------------------
XmlDocument mXmlDoc=new XmlDocument();
mXmlDoc.Load("C:\\test.xml");
//读取第一个TABLE
XmlNodeList ndlst=doc.GetElementsByTagName("table");
XmlNode nd=ndslt.itme(0);
//取evas值
XmlNodeList ndlst1=nd1.SelectNodes("evas");
foreach(XmlNode nd1 in ndlst1)
{
arr.add(nd1.InnerText);
}
saucer 2004-05-13
  • 打赏
  • 举报
回复
string filename = "somefile.xml";

ArrayList al = new ArrayList();

XmlTextReader reader = new XmlTextReader(filename);
reader.WhitespaceHandling=WhitespaceHandling.None;
bool bFirstTable = false;

while(reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.LocalName == "table")
{
if (bFirstTable)
break; //done
else
bFirstTable = true;
}
else if (bFirstTable && reader.LocalName == "eva")
al.Add(reader.ReadString());
}

}

reader.Close();
91bct 2004-05-13
  • 打赏
  • 举报
回复
CMIC(大象)的方法可以实现。
91bct 2004-05-13
  • 打赏
  • 举报
回复
思归的方法是把所有的eva值取出来,而不是 第一个table中的evas中的所有eva值。
saucer 2004-05-13
  • 打赏
  • 举报
回复
use XmlReader, it is more efficient, try something like (didn't test, so there might be errors):

string filename = "somefile.xml";

ArrayList al = new ArrayList();

XmlTextReader reader = new XmlTextReader(filename);
reader.WhitespaceHandling=WhitespaceHandling.None;

while(reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.LocalName == "eva")
al.Add(reader.ReadString());
}

reader.Close();
CMIC 2004-05-12
  • 打赏
  • 举报
回复
C;\text.xml

<?xml version="1.0" encoding="gb2312"?>
<root>
<table>
<evas>
<eva>0</eva>
<eva>1</eva>
<eva>1</eva>
<eva>1</eva>
</evas>
</table>
<table>
<evas>
<eva>2</eva>
<eva>2</eva>
<eva>2</eva>
<eva>2</eva>
</evas>
</table>
</root>

----------------------------------
XmlDocument mXmlDoc=new XmlDocument();
mXmlDoc.Load("C:\\test.xml");
XmlNode mXmlNode=mXmlDoc.SelectSingleNode("root/table/evas");
System.Collections.ArrayList mList=new ArrayList();
foreach(XmlNode sXmlNode in mXmlNode.ChildNodes)
{
mList.Add(sXmlNode.InnerText);
}
gong_ji 2004-05-12
  • 打赏
  • 举报
回复
好像不行也!
dreammaster 2004-05-12
  • 打赏
  • 举报
回复
XmlDocument doc = new XmlDocument();

doc.LoadXml("<?xml version='1.0' ?><root>" +
"<table>" +
" <evas>" +
" <eva>1</eva>" +
" <eva>2</eva>" +
" <eva>3</eva>" +
" <eva>4</eva>" +
" </evas>"+
"</table>" +
"<table>" +
" <evas>" +
" <eva>1a</eva>" +
" <eva>2a</eva>" +
" <eva>3a</eva>" +
" <eva>4a</eva>" +
" </evas>"+
"</table>" +
"</root>");

XmlNodeList list = doc.DocumentElement.SelectNodes("/root/table");
ArrayList al = new ArrayList();

for (int i = 0 ; i < list[0].ChildNodes[0].ChildNodes.Count; i++)
{
al.Add(list[0].ChildNodes[0].ChildNodes[i].InnerXml);
Response.Write("<br>XML: " + i +" -- " + list[0].ChildNodes[0].ChildNodes[i].InnerXml);

}
cuike519 2004-05-12
  • 打赏
  • 举报
回复
嘿嘿!你把这个XML读到DataSet里面再取值就很方便了!否则要写XMLReader了!

110,534

社区成员

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

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

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