XML读取元素的值用value为什么不行

zzmsyt 2011-05-25 10:55:21

public string GetNodeValue(string nodename)
{
try
{
using (XmlTextReader reader = new XmlTextReader(System.Windows.Forms.Application.StartupPath + "\\1.xml"))
{
while (reader.Read())
{
if (reader.Name == nodename)
{
return reader.Value;
}
}
return null;
}
}
catch (Exception ex)
{
return ex.ToString();
}

用value取不出值,那么这个value指的是什么?而用readstring()却能读取
...全文
156 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2011-05-25
  • 打赏
  • 举报
回复
<name>john</name>

这里面john文字节点属于文本Text
<name>john</name>这个是节点,不是Text,
紫色沙漠ing 2011-05-25
  • 打赏
  • 举报
回复
/// </summary>
/// <param name="strPath">XML文件路径</param>
/// <param name="strXmlName">二级节点名称</param>
/// <param name="XmlType">三级节点名称</param>
/// <returns></returns>
public static DataTable LoadXmlInfos(string strPath, string strXmlName, string XmlName)
{
DataTable temptable = new DataTable();
temptable.Columns.Add("id");
temptable.Columns.Add("value");
int intXmlCount = 0;
int intNum = 0;
XmlNodeList xmlSonList;
XmlNodeList xmlSonSonList;
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.RemoveAll();
XmlDoc.Load(strPath);
XmlNodeList xmlNodeList = XmlDoc.DocumentElement.ChildNodes;

if (XmlName == "")
{
foreach (XmlElement xmlEle in xmlNodeList)
{
xmlSonList = xmlEle.ChildNodes;
if (xmlEle.Name.ToString() == strXmlName)
{
intXmlCount = xmlSonList.Count;
}
}
string[] strValue = new string[intXmlCount];
foreach (XmlElement xmlEle in xmlNodeList)
{
xmlSonList = xmlEle.ChildNodes;
foreach (XmlElement XmlEmt in xmlSonList)
{
if (XmlEmt.Name.ToString() == strXmlName + intNum.ToString())
{
DataRow dr = temptable.NewRow();
dr[0] = XmlEmt.Attributes["id"].Value.ToString();
dr[1] = XmlEmt.Attributes["value"].Value;
temptable.Rows.Add(dr);
if (intNum >= intXmlCount)
{
break;
}
intNum++;
}
}

}
}
else
{
foreach (XmlElement xmlEle in xmlNodeList)
{
xmlSonList = xmlEle.ChildNodes;
if (xmlEle.Name.ToString() == strXmlName)
{
foreach (XmlElement item in xmlSonList)
{
xmlSonSonList = item.ChildNodes;
if (item.Name.ToString() == strXmlName + XmlName)
{
intXmlCount = xmlSonSonList.Count;
}
}
}
}
string[] strValue = new string[intXmlCount];
foreach (XmlElement xmlEle in xmlNodeList)
{
xmlSonList = xmlEle.ChildNodes;
foreach (XmlElement XmlEmt in xmlSonList)
{
xmlSonSonList = XmlEmt.ChildNodes;
if (XmlEmt.Name.ToString() == strXmlName + XmlName.ToString())
{
foreach (XmlElement item in xmlSonSonList)
{
if (item.Name.ToString() == strXmlName + "Type" + intNum.ToString())
{
DataRow dr = temptable.NewRow();
dr[0] = item.Attributes["id"].Value.ToString();
dr[1] = item.Attributes["value"].Value;
temptable.Rows.Add(dr);
if (intNum >= intXmlCount)
{
break;
}
intNum++;
}
}
}
}

}
}
return temptable;
}
zzmsyt 2011-05-25
  • 打赏
  • 举报
回复
呵呵 是并非所有路径都有返回值吧。中间循环那里有问题
zyh86102373 2011-05-25
  • 打赏
  • 举报
回复
报没有返回值的错
zyh86102373 2011-05-25
  • 打赏
  • 举报
回复
private void Form5_Load(object sender, EventArgs e)
{
MessageBox.Show(GetNodeValue("DateCreated"));
}
public string GetNodeValue(string nodename)
{
XmlDocument xd = new XmlDocument();
xd.LoadXml(@"C:\Documents and Settings\Nick\Desktop\1.xml");
XmlNodeList xmlnode = xd.DocumentElement.ChildNodes;
for (int i = 0; i < xmlnode.Count; i++)
{
if (xmlnode[i].Name == nodename)
{
return xmlnode[i].Value;
}
else
{
return "找不到该节点";
}
}

}
我刚刚又写了你想实现的这个方法,但是我2了,不知道为什么报错 看看
zzmsyt 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 net_lover 的回复:]
Value一般是属性值,节点使用 Value读取返回的是空

参见说明
http://msdn.microsoft.com/zh-cn/library/system.xml.xmltextreader.value.aspx
[/Quote]
恩 谢谢你 这个我看过了,value是根据类型来判断的,但是我那个比如说是<name>john</name>这很显然是文本啊
zzmsyt 2011-05-25
  • 打赏
  • 举报
回复
楼上的请详细说下,貌似是你说的这种情况,但是代码不就是这么写的吗?
zyh86102373 2011-05-25
  • 打赏
  • 举报
回复
我刚刚把你的代码赋值去调试,发现每个nodename在reader.Name中都出现两次,说明你用的这个函数得到的不是一个完整的节点,而是那个节点的单词,所以他的value值也绝对不是该节点中间包含的值
孟子E章 2011-05-25
  • 打赏
  • 举报
回复
Value一般是属性值,节点使用 Value读取返回的是空

参见说明
http://msdn.microsoft.com/zh-cn/library/system.xml.xmltextreader.value.aspx
zzmsyt 2011-05-25
  • 打赏
  • 举报
回复
在线等

110,534

社区成员

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

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

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