ASP.NET读取XML文件实例代码

作者:袖梨 2022-06-25

datatable datasource(string xmlfile)
  {

  dataset objds = new dataset();

  //假设xml文件放在app_data目录下

  objds.readxml(httpcontext.current.server.mappath("~/app_data/" + xmlfile));

  return objds.tables[0];

  }

  string getfeildtext(datatable dt, string condition, string outputfieldtext)

  {

  string result = string.empty;

  datarow[] row = dt.select(condition);

  if (row.length > 0)

  result = row[0][outputfieldtext].tostring();

  return result;

  }

  //假设需求是:根据id找name

  string getsexname(string id)

  {

  string condition = "id= '" + id+ "'";

  return getfeildtext(datasource(), condition, "name");

  }

 

下面的代码将使用xmltextreader对象将磁盘文件中的数据读取到xmldocument对象中。xmltextreader对象在功能上和streamreader及binaryreader对象十分相似,只不过它是专为读取xml文件而特别设计的。除此以外,xmltextreader对象还有其他一些与xml相关的特性。例如,代码中使用到的whitespacehandling属性告诉应用程序不要为xml文件中多余的空格建立节点。

下面的代码使用xmltextreader对象的documentelement属性来查找xml文档的树状表达形式的根节点。之后,递归地调用addwithchildren方法将将节点及它的子节点一同添加到listbox中。

下面的代码还包含了属性的处理。属性节点并不包含在一个xmldocument对象的节点的子节点集合中。因而,你只能使用xmlnode对象的attributes属性获得属性节点集合。获取了属性节点集合后,代码使用xmlnamednodemap对象来保存这个集合。这个对象能够保存任何类型的xmlnode对象的任何集合。

代码列表

private void btnload_click(object sender, system.eventargs e)

{

xmltextreader reader = new xmltextreader(

server.mappath("mycompany.xml"));

 

reader.whitespacehandling = whitespacehandling.none;

xmldocument xmldoc = new xmldocument();

//将文件加载到xmldocument对象中

xmldoc.load(reader);

//关闭连接

reader.close();

//向listbox中添加代表文档的元素

lbnodes.items.add("xml document");

//查找根节点,并将它及它的子节点一同添加到listbox中

xmlnode xnod = xmldoc.documentelement;

addwithchildren(xnod,1);

}

 

private void addwithchildren(xmlnode xnod, int32 intlevel)

{

//将节点及它的子节点一同添加到listbox中

//intlevel 控制缩进的深度

xmlnode xnodworking;

string strindent = new string(' ',2 * intlevel);

//如果节点有值,读取它的值

string strvalue = (string) xnod.value;

if(strvalue != null)

{

strvalue = " : " + strvalue;

}

//将节点的详细信息添加到listbox中

lbnodes.items.add(strindent + xnod.name + strvalue);

//如果是元素节点,获取它的属性

if (xnod.nodetype == xmlnodetype.element)

{

xmlnamednodemap mapattributes = xnod.attributes;

//将节点属性添加到listbox中

foreach(xmlnode xnodattribute in mapattributes)

{

lbnodes.items.add(strindent + " " + xnodattribute.name +

" : " + xnodattribute.value);

}

//如果还有子节点,就递归地调用这个程序

if(xnod.haschildnodes)

{

xnodworking = xnod.firstchild;

while (xnodworking != null)

{

addwithchildren(xnodworking, intlevel +1);

xnodworking = xnodworking.nextsibling;

}

}

}

}

}

 

相关文章

精彩推荐