xmldocument操作

摘要:
将DataTable、ArrayList或者Hashtable这类数据源绑定到控件上是非常容易的,但你可能经常需要将它们绑定到一个XmlDocument上。这种情况尤其体现在你使用的组件返回的是一个XmlDocument而不是来自某个方法的一个DataSet时。虽然由于XmlDocument对象不支持IList等接口而使你无法直接将它绑定到控件上,但是实现绑定并不复杂。这个特定的类是从XmlReader中继承而来的,而且它能够将XmlDocument导入到一个DataSet的ReadXml()方法中。XmlNodeReader负责将XML数据从XmlDocument中的某个特定节点中导出来。
xmldocument操作第1张xmldocument操作第2张Code
XmlDocumentmydoc=newXmlDocument();
stringpath=AppDomain.CurrentDomain.BaseDirectory+"\\GeneralApp\\FormView\\Report\\XMLFile.xml";
XmlTextReaderxtr
=newXmlTextReader(path);
mydoc.Load(path);
XmlNodexn
=mydoc.SelectSingleNode("config/sql/meter");
strings=xn.InnerText;
XmlElementroot
=mydoc.DocumentElement;
XmlElementnewnode1
=mydoc.CreateElement("zd");
XmlElementnewnode2
=mydoc.CreateElement("cz");
newnode1.InnerText
="ZD";
newnode2.AppendChild(newnode1);
root.AppendChild(newnode2);
xtr.Close();
mydoc.Save(path);
XmlDocumentdoc
=newXmlDocument();
strings1=Server.MapPath("Sqlsource.xml");
doc.Load(s1);
XmlNodeReaderxnr
=newXmlNodeReader(doc);
DataSetds
=newDataSet();
ds.ReadXml(xnr);
xnr.Close();

要点:获取到要操作的XML文件地址,两种方法:server.mappath("FileName.xml"),appdomain...

获取到子节点,两种方法:mydoc.SelectSingleNode("config/sql/meter");

private XmlNode GetDataSourceInfo(XmlNode node, string reportName)
{
XmlNodeList node1 = node.SelectNodes("sqlsource");
if (node1 == null)
{
throw new XmlException("Can't find DataSource Node");
}
foreach (XmlNode _node in node1)
{
XmlNodeList list1 = _node.SelectNodes("*"); ;
foreach (XmlNode node2 in list1)
{
string text1;
if ((text1 = node2.Name) == null)
{
continue;
}
text1 = string.IsInterned(text1);
if (text1 == "reportName" && node2.InnerText == reportName)
{
return _node;
}
}
}
return null;
}

另附参考网上资料:

将一个XmlDocument对象绑定到DataSet中以便将它绑定到控件上。
by Dan Wahlin

数据绑定是.NET平台上的一个强大功能,它能使你将不同的数据源绑定到DataGrid、DataList和Repeater控件上。将DataTable、ArrayList或者Hashtable这类数据源绑定到控件上是非常容易的,但你可能经常需要将它们绑定到一个XmlDocument上。这种情况尤其体现在你使用的组件返回的是一个XmlDocument而不是来自某个方法的一个DataSet时。

虽然由于XmlDocument对象不支持IList等接口而使你无法直接将它绑定到控件上,但是实现绑定并不复杂。事实上,你只需编写几行代码便可将它绑定到一个DataSet中,然后通过DataSet将它绑定到其他控件上。

它的诀窍在于使用了System.Xml命名空间下的XmlNodeReader类。这个特定的类是从XmlReader中继承而来的,而且它能够将XmlDocument导入到一个DataSet的ReadXml()方法中。之后你便可以将这个DataSet绑定到各类控件中了。XmlNodeReader负责将XML数据从XmlDocument中的某个特定节点中导出来。数据流开始的节点会被输送到XmlNodeReader的构造器中:

[C#] public XmlNodeReader(
XmlNode node
);

[VB.NET]

Public Sub New( _
ByVal node As XmlNode _
)

XmlDocument的根元素(引用自DocumentElement属性)可以被传入XmlNodeReader的构造器中以防整个XmlDocument需要被转化为XML数据流。以下代码说明如何通过XmlNodeReader类来将一个XmlDocument转化为一个DataSet(DataSet中的一个DataTable会被绑定到一个DataGrid服务器控件中):

private void Page_Load(object sender,
System.EventArgs e) {
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("Orders.xml"));
XmlNodeReader reader = new XmlNodeReader(doc);
DataSet ds = new DataSet();
ds.ReadXml(reader);
reader.Close();
dg.DataSource = ds.Tables[0].DefaultView;
dg.DataBind();
}

XmlDocument操作xml文档

<?xml version="1.0" encoding="utf-8"?>
<userdata createuser="false">
<dataconnection>
<server>xml test</server>
<uid>sa</uid>
<pwd>sa</pwd>
</dataconnection>
<net>
<name>xml document</name>
</net>
</userdata>

读取节点中的一个属性
XmlDocument doc=new XmlDocument();
doc.Load("config.xml");
XmlNode xnuser=doc.SelectSingleNode("userdata");
string flag=xnuser.Attributes["createuser"].InnerText;

读取节点中的值
XmlDocument doc=new XmlDocument();
doc.Load("config.xml");
XmlNode xnserver = doc.SelectSingleNode("userdata/dataconnection/server");

修改节点的属性
XmlDocument doc=new XmlDocument();
doc.Load("config.xml");
XmlNode xnuser=doc.SelectSingleNode("userdata");
xnuser.Attributes["createuser"].InnerText="false";
doc.Save("config.xml");

追加节点
XmlDocument doc = new XmlDocument();
XmlTextReader reader = new XmlTextReader("config.xml");
doc.Load("config.xml");
XmlElement root = doc.DocumentElement; // 获取根节点
XmlElement tagMessage = doc.CreateElement("net");
XmlElement tagText = doc.CreateElement("name");
tagText.InnerText = netname;
tagMessage.AppendChild(tagText); // 追加到 xml 文本的最后面
root.AppendChild(tagMessage);
reader.Close(); // 关闭 XmlTextReader
doc.Save("config.xml"); // 保存 xml 文件

免责声明:文章转载自《xmldocument操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python接口自动化实战(第二阶段)- 数据与代码分离如何从 Windows 虚拟机分离数据磁盘下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Latex 双栏模式下表格太长怎么办?

有时一张桌子放不下任何一页。如果使用原始表包,它可能会溢出。因此,自动更改表格是很自然的。对于许多在线材料,建议使用Longtable。但是因为我的文章是双栏文章,所以这个包会有问题。例如,表格将只浮动在文本上,标题的显示也有问题。经过长时间的尝试,我终于找到了解决方案,而且非常简单。只需缩放表格。方法如下:egin{table*}[!...

java报表实现excel一样冻结表头的功能

增加了几个新的指标,后台sql改了,拿过来只须在一个dao类中修改就足够了,可恨的是客户又提出来改报表表样,加个类似excel冻结表头的功能。...

Notepad++正则表达式查找替换文本中文字符

测试需求测试工具中xml配置文件中的注释字段包含中文字符。Win10系统中使用的工具中偶尔会出现中文乱码,导致配置文件无效。解决方案是将配置文件中的中文注释替换为英文注释,或者直接替换和删除。如何查找和删除配置文件中的汉字?“记事本”中使用正则表达式[^x00 xff]来匹配汉字。替换完成如下3。所有汉字已被替换。...

IDEA(MAC) 快捷键

从日食到IDEA;从Windows到MAC,我不习惯录制一些日常使用的快捷键。1.格式代码命令+alt+L2。导出包alt+entercontrol+alt+O3。自动生成此类型的对象命令+alt+V4。复制命令行+d5。上下移动一行代码shift+alt+上/下箭头6。上下移动代码Shift+Command+上下键6。生成foreacher7。生成列表遍历...

Axure RP 8 注册码 更新了

升级8.1.0.3381后,您需要使用以下注册码http://www.raedme.cn/keys/316.htmlLicense:zdfansKey:fZw2VoYzXakllUuLVdTH13QYWnjD6NZrxgubQkaRyxD5+HNMqdr+WZKkaa6IoE5N许可证:zd423Key:LrZoHMetrL7OK8XOVWgvTFn+XOR...

Win10阻止电脑关机时弹出正在关闭应用的方法及恢复

当计算机上安装了Windows 10时,当我们在未完成所有运行程序的情况下关闭计算机时,将弹出n个应用程序正在关闭并关闭的提示。第一步是创建一个自动关闭应用程序并将其添加到注册表的注册表文件。这可以解决在Windows 10系统计算机关闭时弹出提示关闭n个应用程序并关闭的问题。...