xml节点取值问题...

evjen 2009-04-14 08:20:42
有这样一个xml文件

<?xml version="1.0" encoding="big5" ?>
- <LINEUP>
<TEAM_INFO HOME_ID="4" GAME_TIME="2009/04/13 19:15"/>
- <PLAYER_LIST>
<PLAYER PLAYER_NAME="C罗" PLAYER_NUMBER="12" POSITION="前锋" STATUS_ID="0" />
<PLAYER PLAYER_NAME="贝壳汉姆" POSITION="中场" STATUS_ID="0" />
<PLAYER PLAYER_NAME="李玮峰" PLAYER_NUMBER="25" POSITION="门" STATUS_ID="0" />
</PLAYER_LIST>
</LINEUP>


在节点PLAYER_LIST下面,有的有PLAYER_NUMBER属性,有的没有PLAYER_NUMBER属性

在循环读取这个xml文档的时候(PLAYER_LIST 下的) ,我是定义了4个变量分别保存PLAYER_LIST, PLAYER_NUMBER,POSITION,STATUS_ID
当读到第二个PLAYER 的时候 <PLAYER PLAYER_NAME="贝壳汉姆" POSITION="中场" STATUS_ID="0" />

应为他没有PLAYER_NUMBER属性 ,那我怎么判断这一行没有PLAYER_NUMBER属性,并给此PLAYER_NUMBER默认赋值为0;

这一步是怎么判断并且默认赋值PLAYER_NUMBER为0???
在线等...
...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
szldk 2009-04-15
  • 打赏
  • 举报
回复
关注
lonelySurvive 2009-04-15
  • 打赏
  • 举报
回复

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.Xml;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument xd = new XmlDocument();
xd.Load(Request.PhysicalApplicationPath + "Books.xml");

XmlNodeList xnl = xd.GetElementsByTagName("PLAYER");
foreach (XmlElement xe in xnl)
{
if (xe.Attributes["PLAYER_NUMBER"] != null)
{
Response.Write(xe.Attributes["PLAYER_NUMBER"].Value + "<br/>");
}
else
{
XmlAttribute xa = xd.CreateAttribute(null, "PLAYER_NUMBER", null);
xa.Value = "0";
xe.Attributes.Append(xa);
}
}
xd.Save(Server.MapPath("Books.xml"));


//Response.Write(xd.OuterXml);
}
}

lonelySurvive 2009-04-14
  • 打赏
  • 举报
回复
要断电了,不好意思,第2个问题的代码还给你写出来
第2个问题的大概思路就是用 XmlDocument来做,第1个用XmlReader


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;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int bookcount = 0;
XmlReaderSettings settings = new XmlReaderSettings();

settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;

//我们不是创建XmlReader类的的具体实现代码,而是创建XmlReaderSettings类的一个实力
//,把它传给Create方法,用XmlReaderSettings类为XmlReader对象指定需要的供能
string booksFile = Path.Combine(Request.PhysicalApplicationPath, "Books.xml");
using (XmlReader reader = XmlReader.Create(booksFile, settings))
{
while (reader.Read())//如果成功读取了节点,就返回True,当节点都读取完了,它就返回false
{
if (reader.NodeType == XmlNodeType.Element && reader.HasAttributes)
{
if (reader["PLAYER_NUMBER"] != null)
{
Response.Write(reader["PLAYER_NUMBER"].ToString()+" ");
}
//Response.Write(reader.GetAttribute("PLAYER_NUMBER")+"<br/>");
//bookcount++;
}
}
}
//Response.Write(String.Format("Found {0} books!", bookcount));
}

}

ayymbirst 2009-04-14
  • 打赏
  • 举报
回复
你好,可参考如下思路,如存在问题可联系我.
using System;
using System.Collections.Generic;
using System.Text;

namespace xmlReader
{
class Program
{
static void Main(string[] args)
{
//生成XML
string str = "<?xml version=\"1.0\" encoding=\"utf-8\" ?> " + System.Environment.NewLine
+ " <LINEUP>" + System.Environment.NewLine
+" <TEAM_INFO HOME_ID=\"4\" GAME_TIME=\"2009/04/13 19:15\"/> " + System.Environment.NewLine
+"<PLAYER_LIST>" + System.Environment.NewLine
+" <PLAYER PLAYER_NAME=\"C罗\" PLAYER_NUMBER=\"12\" POSITION=\"前锋\" STATUS_ID=\"0\" /> " + System.Environment.NewLine
+"<PLAYER PLAYER_NAME=\"贝壳汉姆\" POSITION=\"中场\" STATUS_ID=\"0\" /> " + System.Environment.NewLine
+"<PLAYER PLAYER_NAME=\"李玮峰\" PLAYER_NUMBER=\"25\" POSITION=\"门\" STATUS_ID=\"0\" /> " + System.Environment.NewLine
+"</PLAYER_LIST>" + System.Environment.NewLine
+ "</LINEUP>";

System.IO.FileStream fs = new System.IO.FileStream("dat.xml", System.IO.FileMode.OpenOrCreate);
byte [] byt = Encoding.UTF8.GetBytes(str) ;
fs.Write(byt, 0, byt.Length);
fs.Flush();
fs.Dispose();

//读取XML
print(GetList("dat.xml"));
}

//输出
static void print(List<date > list)
{
foreach (date dat in list)
{
Console.WriteLine("PLAYER_NAME:{0} , PLAYER_NUMBER:{1} , POSITION:{2} , STATUS_ID:{3}", dat.PLAYER_NAME, dat.PLAYER_NUMBER, dat.POSITION, dat.STATUS_ID);
}
}

//读取数据
static List<date> GetList(string path)
{
List<date> list = new List<date>();
System.Xml.XmlReader reader = System.Xml.XmlReader.Create(path);
while (reader.Read())
{
switch (reader.NodeType)
{
case System.Xml.XmlNodeType .Element:
if (reader.Name.ToLower() == "PLAYER".ToLower())
{
date dat = new date();
while (reader.MoveToNextAttribute())
{
System.Reflection.PropertyInfo pro = dat.GetType().GetProperty(reader.Name);
if (pro.PropertyType == typeof(string))
pro.SetValue(dat, reader.Value, null);
else
pro.SetValue(dat, int.Parse(reader.Value), null);
}
list.Add(dat);
}
break;
}
}
return list;
}

//球员信息数据实体类
public class date
{
string PLAYER_NAME_;
int PLAYER_NUMBER_ = 0;
string POSITION_;
int STATUS_ID_;

public string PLAYER_NAME
{
get { return PLAYER_NAME_; }
set { PLAYER_NAME_ = value; }
}
public int PLAYER_NUMBER
{
get { return PLAYER_NUMBER_; }
set { PLAYER_NUMBER_ = value; }
}
public string POSITION
{
get { return POSITION_; }
set { POSITION_ = value; }
}

public int STATUS_ID
{
get { return STATUS_ID_; }
set { STATUS_ID_ = value; }
}
}
}
}
evjen 2009-04-14
  • 打赏
  • 举报
回复
写点代码
fire0907 2009-04-14
  • 打赏
  • 举报
回复
同上
try
{
//取改结点的PLAYER_NUMBER值
}
catch
{
//增加结点属性PLAYER_NUMBER,赋值0
}
热学沸腾56 2009-04-14
  • 打赏
  • 举报
回复
up,mark
gui0605 2009-04-14
  • 打赏
  • 举报
回复
加一个try,出错就给他赋0
  • 打赏
  • 举报
回复
判断那个结点是否为空
  • 打赏
  • 举报
回复
顶~

62,046

社区成员

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

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

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

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