标题:关于XML读节点的问题
只看楼主
23760639
Rank: 1
等 级:新手上路
帖 子:277
专家分:0
注 册:2005-5-13
 问题点数:0 回复次数:2 
关于XML读节点的问题


<File xmlns="http://zzzzz>

<Table>
<Rows>
<Row>rtuu</Row>
<Row>hgkhjl</Row>
</Rows>
</Table>

</File>

代码:
XmlDocument doc = new XmlDocument();
doc.Load(文件名);
XmlNamespaceManager x = new XmlNamespaceManager(doc.NameTable);
x.AddNamespace(String.Empty, "http://zzzzz");

XmlNodeList list = doc.SelectNodes("Table/Rows/Row", x);
不能读出节点,请指正 ,在线等待。谢谢!

搜索更多相关主题的帖子: XML 节点 
2007-08-14 12:38
virusplayer
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-8-2
得分:0 

<?xml version="1.0" encoding="utf-8" ?>
<file>
<table>
<rows>
<row>asdf</row>
<row>fda</row>
</rows>
</table>
</file>


private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(Application.StartupPath);
string path = Application.StartupPath;

XmlDocument doc = new XmlDocument();
doc.Load(Application.StartupPath + "\\XMLFile1.xml");
XmlNodeList nodes = doc.GetElementsByTagName("row");
textBox1.Text = nodes[0].InnerText;
}

2007-08-14 14:22
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
得分:0 

我的一段程序,用于XML文件的创建,及节点的读与写操作
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;

namespace PersonalTimer
{
class OperateXML
{
string fileName;
XmlDocument xmlDoc;
XmlElement xmlElement;

public OperateXML(string xmlFileName)
{
this.fileName = xmlFileName;
if (!File.Exists(xmlFileName))
{ // 如果XML文档不存在,就创建它
this.Create();
}
}

public string FileName
{
get
{
return fileName;
}
set
{
fileName = value;
}
}

public void Create()
{
xmlDoc = new XmlDocument(); // 创建XML文档
// 加入XML的声明段落,<?xml version="1.0" encoding="gb2321"?>
XmlDeclaration xmlDecl = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
xmlDoc.AppendChild(xmlDecl);

// 加入一个根元素
xmlElement = xmlDoc.CreateElement("", "PersonalTimer", "");
xmlElement.SetAttribute("IsSave", "true");
xmlElement.SetAttribute("IsAutoStart", "true");
xmlElement.SetAttribute("IsTopMost", "true");
xmlElement.SetAttribute("CreatteDate", string.Format("{0}-{1}-{2}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day));
xmlDoc.AppendChild(xmlElement);

#region 用于表示主窗口的状态
XmlElement xe1 = xmlDoc.CreateElement("MainForm");

// 创建一个节点,用于表示是否显示"计时器"
XmlElement xeStopwatch = xmlDoc.CreateElement("Stopwatch");
xeStopwatch.SetAttribute("Visible", "false"); // 设置该节点的"Visible"属性,"false"(隐藏)或"true"(显示)
xeStopwatch.SetAttribute("State", "Stop"); // 设置该节点的"State"属性,"Started"(已启动)或"Stop"(已停止)
xe1.AppendChild(xeStopwatch);

// 创建一个节点,用于表示所显示时间的信息(如位置及颜色)
XmlElement xeTimer = xmlDoc.CreateElement("Timer");
xeTimer.SetAttribute("ForeColor", "Red"); // 存储字体颜色,
xeTimer.SetAttribute("ForeSize", "2"); // 存储字体大小, 1-小,2-中,3-大
XmlElement xePosition = xmlDoc.CreateElement("Position"); // 存储位置
xePosition.SetAttribute("State", "RightBottom");
xePosition.SetAttribute("X", "0"); // X座标的值
xePosition.SetAttribute("Y", "0"); // Y 座标的值
xeTimer.AppendChild(xePosition);
xe1.AppendChild(xeTimer);
xmlElement.AppendChild(xe1);

#endregion

#region 关于记时器的定时方式及相关的值
// 创建节点,用于表示所设定的定时方式
XmlElement xeSub1 = xmlDoc.CreateElement("StopwatchMode");
xeSub1.SetAttribute("Mode", "Future"); // 设置该节点的"Mode"属性,"Delay"表时延时XX分钟执行,"Future表示将于XX时XX分XX秒很行
// 创建节点,用于储存延时的时间 (如果当TimeMode节点的Mode属性为Delay时才会使用
XmlElement xeChild1 = xmlDoc.CreateElement("DelayMinute");
xeChild1.SetAttribute("Value", "5"); // 设置该节点的"Value"属性,用于储存所延时的分数.
xeSub1.AppendChild(xeChild1);
// 创建节点,用于储存将于XX时XX分XX秒执行的时间
XmlElement xeChild2 = xmlDoc.CreateElement("FutureTime");
xeChild2.SetAttribute("Hour", "23"); // 设置节点的"Hour"属性,用于储存"时"
xeChild2.SetAttribute("Minute", "59"); // 设置节点的"Minute"属性,用于储存"分"
xeChild2.SetAttribute("Second", "59"); // 设置节点的"Second"属性,用于储存"秒"
xeSub1.AppendChild(xeChild2);
xmlElement.AppendChild(xeSub1);
#endregion

#region 操作任务设定

XmlElement xeSub2 = xmlDoc.CreateElement("TaskMode");
xeSub2.SetAttribute("Mode", "Remind"); // 设置节点的"Mode"属性."ShutDown"表示关机,"Logoff"表示注销,"Reboot"表示重新启动,"Remind"表示提醒
// 创建节点,用于储存节点为"提醒"状态时,其提醒的内容
XmlElement xeRemind = xmlDoc.CreateElement("Remind");
xeRemind.SetAttribute("Text", "注意保护眼睛,别太长时间盯着电脑屏幕!"); // 节点的"Text"属性,用于储存提醒的文本内容
xeSub2.AppendChild(xeRemind);

xmlElement.AppendChild(xeSub2);

#endregion

xmlDoc.Save(fileName);
}

/// <summary>
/// 在一父节点中查找指定节点(采用递归法)
/// </summary>
/// <param name="parentNodeName">父节点名</param>
/// <param name="strNodeName">要查找的子节点名</param>
/// <returns>查找到的节点</returns>
private XmlElement getNode(XmlNode parentNode, string strNodeName)
{
XmlElement xeResult = null;
XmlNodeList nodeList = parentNode.ChildNodes; // 获取节点的所有子节点
foreach (XmlNode xn in nodeList)
{
XmlElement xe = (XmlElement)xn;
if (xe.Name == strNodeName)
{
xeResult = xe;
return xeResult;
}
else
{
xeResult = getNode(xn, strNodeName);
}
if (xeResult != null)
{
return xeResult;
}
}
return xeResult; ;
}

/// <summary>
/// 读取节点中属性的值
/// </summary>
/// <param name="strNodeName">节点名</param>
/// <param name="strAttributeName">属性名</param>
/// <returns>返回属性的值</returns>
public string Read(string strNodeName,string strAttributeName)
{
string strResult = null;
xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
// 获取PersonalTimer节点的所有子节点.
XmlNode rootNode = xmlDoc.SelectSingleNode("PersonalTimer");
if (rootNode.Name == strNodeName)
{
XmlElement xeroot = (XmlElement)rootNode;
return xeroot.GetAttribute(strAttributeName);
}
XmlElement xe = getNode(rootNode, strNodeName);
if (xe == null)
{
throw new Exception("该节点的属性名称不正确或XML文档已损坏");
}
else
{
strResult = xe.GetAttribute(strAttributeName);
}
if (strResult == null)
{
throw new Exception("你输入的节点名称不正确或XML文档已损坏");
}
return strResult;
}

/// <summary>
/// 更新节点中属性的值
/// </summary>
/// <param name="strNodeName">节点名</param>
/// <param name="strAttributeName">属性名</param>
/// <param name="strValue">值</param>
/// <returns>更新完成返回true,否则返回false</returns>
public bool Update(string strNodeName, string strAttributeName, string strValue)
{
bool blResult = false;
xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
// 获取PersonalTimer节点的所有子节点.
XmlNodeList nodeList = xmlDoc.SelectSingleNode("PersonalTimer").ChildNodes;
XmlNode rootNode = xmlDoc.SelectSingleNode("PersonalTimer");
if (rootNode.Name == strNodeName)
{
XmlElement xeroot = (XmlElement)rootNode;
xeroot.SetAttribute(strAttributeName, strValue);
return true;
}
XmlElement xe = getNode(rootNode, strNodeName);
if (xe.Name == strNodeName)
{
try
{
xe.SetAttribute(strAttributeName, strValue);
xmlDoc.Save(fileName);
blResult = true;
}
catch
{
throw new Exception("该节点的属性名称不正确或XML文档已损坏");
}
}
if (blResult == false)
{
throw new Exception("你输入的节点名称不正确或XML文档已损坏");
}
return blResult;
}
}
}


帮助那些真正需要帮助的人,是对帮助你的人最好的回报!
2007-08-14 16:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-162584-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016469 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved