救急,读配置文件,~~~

blankfang 2009-10-22 07:11:52
<?xml version="1.0" encoding="utf-8" ?>
<rundefine>
rundefine
<bookname>name1</bookname>
</book>
<book1>
<bookname>name2</bookname>
<bookname2>name3</bookname2>
</book1>
</rundefine>
怎么样得到节点<book>、<book1>和各子节点的个数和值,c# 语言,谢谢各位兄弟姐妹了~~~~~~~~~~~
例如:求出rundefine下面有几个<book>,<book1>的节点和对应的值,循环<book>或是<book1>,得到下面的子节点和子节点的值

...全文
151 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
SimpleM 2009-10-23
  • 打赏
  • 举报
回复
LZ只需要看楼上几位用两层foreach循环输出的就可以了
huoyingyangjie 2009-10-22
  • 打赏
  • 举报
回复
- -!哥教你
public void read()
{

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("Load.xml");//Loading.xml是你的xml文件名,如果你的文件在debug下面那么直接写文件名就可以了,如果不在就写绝对路径。

XmlNodeList nodeList = xmlDoc.SelectSingleNod("rundefine").ChildNodes;//获取bookstore节点的所有子节点
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型

XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点

foreach (XmlNode xn1 in nls)//遍历
{
XmlElement xe2 = (XmlElement)xn1;//转换类型
那么xe2.name就是你想要的值;什么bookname1啊bookname2啊bookname3你都可以获得;

}


xmlDoc.Save("Load.xml");//保存。
}
就这样简单,更新啊,修改啊,写入都可以。不过哥要玩Warcraft了,再见。
还有你如果有其他什么节点,在foreach就可以了,程序是很简单的,就看你怎么想
oasistree 2009-10-22
  • 打赏
  • 举报
回复
Mark,正在学习xml
Justin-Liu 2009-10-22
  • 打赏
  • 举报
回复
用XmlDocument
wuyq11 2009-10-22
  • 打赏
  • 举报
回复
System.Xml.XmlDocument xmlDoc= new System.Xml.XmlDocument();
xmlDoc.LoadXml("");
XmlNode xn=xmlDoc.SelectSingleNode("rundefine");
XmlNodeList xnl=xn.ChildNodes;
foreach(XmlNode xnf in xnl)
{
XmlElement xe=(XmlElement)xnf;
XmlNodeList xnf1=xe.ChildNodes;
foreach(XmlNode xn2 in xnf1)
{
Console.WriteLine(xn2.InnerText);
}
}
wuyq11 2009-10-22
  • 打赏
  • 举报
回复
System.Xml.XmlDocument dom = new System.Xml.XmlDocument();
dom.LoadXml(xml);
foreach (System.Xml.XmlNode node in dom.ChildNodes)
{
if(!node.Name.Equals("xml"))
Response.Write(GetNode(node)+"<BR>");
}
string GetNode(System.Xml.XmlNode node)
{
string str = node.InnerText;
if (node.HasChildNodes)
{
str = "";
foreach (System.Xml.XmlNode n in node.ChildNodes)
{
str += GetNode(n);
}
str += "<BR>";
}
return str;
}
csrwgs 2009-10-22
  • 打赏
  • 举报
回复
Mark
楼上回答的都对哈
wartim 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 blankfang 的回复:]
我实在是看不懂,能不能来个c#版的,这里谢过了
[/Quote]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace ConsoleApplication9
{
class Program
{
static void Main(string[] args)
{
XmlDocument Doc = new XmlDocument();

Doc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?>"
+ "<rundefine>"
+ " <book>"
+ " <bookname>name1</bookname>"
+ " </book>"
+ " <book1>"
+ " <bookname>name2 </bookname>"
+ " <bookname2>name3 </bookname2>"
+ " <Colors>"
+ " <Color ID=\"1\">Red</Color>"
+ " <Color ID=\"2\">Green</Color>"
+ " </Colors>"
+ " </book1>"
+ "</rundefine>");

Console.WriteLine("book下的bookname值:" + Doc.SelectSingleNode("/rundefine/book/bookname").InnerText);
Console.WriteLine("book1下的bookname值:" + Doc.SelectSingleNode("/rundefine/book1/bookname").InnerText);
Console.WriteLine("book1下的bookname2值:" + Doc.SelectSingleNode("/rundefine/book1/bookname2").InnerText);
Console.WriteLine("book1/Colors下的属性ID=2的Color值:" + Doc.SelectSingleNode("/rundefine/book1/Colors/Color[@ID=2]").InnerText);

// 用遍历的方法
XmlNodeList Nodes = Doc.SelectNodes("/rundefine/book1/Colors/Color");
for (int i = 0; i < Nodes.Count; i++)
if (Nodes[i].Attributes["ID"].InnerText == "1")
{
Console.WriteLine("遍历book1/Colors/Color,第" + (i + 1).ToString() + "个Color:" + Nodes[i].InnerText);
break;
}

// 取子节点
XmlNode Node = Doc.SelectSingleNode("/rundefine/book1/Colors");
for (int i = 0; i < Node.ChildNodes.Count; i++)
Console.WriteLine("遍历book1/Colors的子节点,第" + (i + 1).ToString() + "个Color:" + Node.ChildNodes[i].InnerText);
Console.Read();
}
}
}


book下的bookname值:name1
book1下的bookname值:name2
book1下的bookname2值:name3
book1/Colors下的属性ID=2的Color值:Green
遍历book1/Colors/Color,第1个Color:Red
遍历book1/Colors的子节点,第1个Color:Red
遍历book1/Colors的子节点,第2个Color:Green
應燁軍 2009-10-22
  • 打赏
  • 举报
回复
    using System.Xml;
public class Test {

static void Main(string[] args) {
Test testObj = new Test();
string xPath = "/rundefine/book/bookname";
string result = testObj.ReadXmlNodeText(@"D:\Text.xml", xPath);
Console.WriteLine(result);
}


/// <summary>
/// 根据XPath读取XML节点值
/// </summary>
/// <param name="xmlPath">XML路径</param>
/// <param name="xPath">xPath</param>
/// <returns>节点值</returns>
public string ReadXmlNodeText(string xmlPath, string xPath) {

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(xmlPath);//载入XML文档

XmlNode node = xmlDoc.SelectSingleNode(xPath);

if (node != null) {

return node.InnerText;
}
return string.Empty;//节点不存在返回空
}

}
chuzhaowei 2009-10-22
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="utf-8" ?>
<rundefine>
<book>
<bookname>name1 </bookname>
</book>
<book1>
<bookname>name2 </bookname>
<bookname2>name3 </bookname2>
</book1>
</rundefine>
XmlDocument x = new XmlDocument();
x.Load("~/a.xml");
XmlNodeList list = x.SelectNodes("/rundefine/book");
StringBuilder sb = new StringBuilder();
sb.AppendFormat("节点名称为 book 的个数为:{0}{1}", list.Count, Environment.NewLine);
int i = 0;
foreach (XmlNode node in list)
{
XmlNodeList cNodes = node.ChildNodes;
sb.AppendFormat("第 {0} 个book节点有 {1} 个子节点,分别是:{2}", ++i, cNodes.Count, Environment.NewLine);
foreach (XmlNode cNode in cNodes)
{
sb.AppendFormat(" 名称:{0},值:{1}{2}", cNode.Name, cNode.InnerText, Environment.NewLine);
}
}


list = x.SelectNodes("/rundefine/book1");
//按上面的方法获得……

blankfang 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 skotben2008 的回复:]
XmlDocument x = new XmlDocument();
            x.Load(Application.StartupPath+"\\a.xml");
            XmlNodeList n = x.SelectNodes("/root/a");
            foreach (XmlNode xm in n)
            {
                for (int i = 0; i < xm.Attributes.Count; i++)
                {
                    richTextBox1.AppendText(xm.Attributes[i].Name + "--" + xm.Attributes[i].Value + "\r\n");
                }
                XmlNodeList nl = xm.ChildNodes;
                foreach (XmlNode no in nl)
                {
                    if (no.NodeType == XmlNodeType.Element)
                        richTextBox1.AppendText(no.Name + "--" + no.InnerText + "\r\n");
                }
            }

结果:
book 1
book 2
book1 aa
book1 bb
book2 dd
book2 ee
[/Quote]

冒失不行呀,难道是我没有理解好???
z415353144 2009-10-22
  • 打赏
  • 举报
回复
前来报到,学习下。。。
skotben2008 2009-10-22
  • 打赏
  • 举报
回复
XmlDocument x = new XmlDocument();
x.Load(Application.StartupPath+"\\a.xml");
XmlNodeList n = x.SelectNodes("/root/a");
foreach (XmlNode xm in n)
{
for (int i = 0; i < xm.Attributes.Count; i++)
{
richTextBox1.AppendText(xm.Attributes[i].Name + "--" + xm.Attributes[i].Value + "\r\n");
}
XmlNodeList nl = xm.ChildNodes;
foreach (XmlNode no in nl)
{
if (no.NodeType == XmlNodeType.Element)
richTextBox1.AppendText(no.Name + "--" + no.InnerText + "\r\n");
}
}

结果:
book 1
book 2
book1 aa
book1 bb
book2 dd
book2 ee
DustLand 2009-10-22
  • 打赏
  • 举报
回复
XmlTextReader xreader = new XmlTextReader(xml文件的路径);
XmlDocument xdoc = new XmlDocument();
xdoc.Load(xreader);
xreader.Close();
XmlNode xnode = xdoc.DocumentElement;
XmlNodeList xnodelist =xdoc.GetElementsByTagName(字段名);

我以前写的一段代码,具体应用可以baidu查一下XmlDocument和XmlNode等用法
blankfang 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wartim 的回复:]
<?xml version="1.0" encoding="utf-8" ?>
<rundefine>
  </book>
    <bookname>name1 </bookname>
  </book>
  <book1>
    <bookname>name2 </bookname>
    <bookname2>name3 </bookname2>
  </book1>
</rundefine>

xpath:
book: /rundefine/book
book1: /rundefine/book1
bookname:/rundefine/book/bookname
        /rundefine/book1/bookname
bookname2:/rundefine/book1/bookname2




[/Quote]

我实在是看不懂,能不能来个c#版的,这里谢过了
wartim 2009-10-22
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="utf-8" ?>
<rundefine>
<book>
<bookname>name1 </bookname>
</book>
<book1>
<bookname>name2 </bookname>
<bookname2>name3 </bookname2>
</book1>
</rundefine>
wartim 2009-10-22
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="utf-8" ?>
<rundefine>
</book>
<bookname>name1 </bookname>
</book>
<book1>
<bookname>name2 </bookname>
<bookname2>name3 </bookname2>
</book1>
</rundefine>

xpath:
book: /rundefine/book
book1: /rundefine/book1
bookname:/rundefine/book/bookname
/rundefine/book1/bookname
bookname2:/rundefine/book1/bookname2



110,534

社区成员

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

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

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