如何读取XML文件中所有节点的值

qiuqingpo 2010-11-12 09:16:18

<?xml version="1.0" encoding="utf-8" ?>
- <Contacts>
- <Contact>
<ID>848495f7-513d-4a40-b417-01b93e8c2cee</ID>
<WindowsLiveID>aaa@msn.com</WindowsLiveID>
<AutoUpdateEnabled>false</AutoUpdateEnabled>
<LastChanged>2006-03-16T03:12:57.8800000Z</LastChanged>
- <Profiles>
- <Personal>
<UniqueName>asd</UniqueName>
<SortName>asdsad</SortName>
<NickName>Chense</NickName>
<DisplayName>Mname</DisplayName>
</Personal>
</Profiles>
- <Emails>
- <Email>
<ID>8</ID>
<EmailType>WindowsLiveID</EmailType>
<Address>askdaa@sina.com</Address>
<IsIMEnabled>true</IsIMEnabled>
<IsDefault>false</IsDefault>
</Email>
</Emails>
</Contact>

- <Contact>
<ID>848495f7-513d-4a40-b417-01b93e8c2cee</ID>
<WindowsLiveID>aaa@msn.com</WindowsLiveID>
<AutoUpdateEnabled>false</AutoUpdateEnabled>
<LastChanged>2006-03-16T03:12:57.8800000Z</LastChanged>
- <Profiles>
- <Personal>
<UniqueName>asd</UniqueName>
<SortName>asdsad</SortName>
<NickName>Chense</NickName>
<DisplayName>Mname</DisplayName>
</Personal>
</Profiles>
- <Emails>
- <Email>
<ID>8</ID>
<EmailType>WindowsLiveID</EmailType>
<Address>askdaa@sina.com</Address>
<IsIMEnabled>true</IsIMEnabled>
<IsDefault>false</IsDefault>
</Email>
</Emails>
</Contact>


</Contacts>

想把所有都读出来.谢谢大家!
...全文
244 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangshun 2010-11-12
  • 打赏
  • 举报
回复
 static void Main(string[] args)
{
XPathNavigator xPathNavigator;
XPathDocument xPathDoc;

xPathDoc = new XPathDocument("C:\\test.xml");


xPathNavigator = xPathDoc.CreateNavigator();

xPathNavigator.MoveToRoot();

xPathNavigator.MoveToFirstChild();

ReturnValue(xPathNavigator);

Console.ReadKey();

/*
ID: 848495f7-513d-4a40-b417-01b93e8c2cee
WindowsLiveID: aaa@msn.com
AutoUpdateEnabled: false
LastChanged: 2006-03-16T03:12:57.8800000Z
Profiles: asdasdsadChenseMname
UniqueName: asd
SortName: asdsad
NickName: Chense
DisplayName: Mname
Emails: 8WindowsLiveIDaskdaa@sina.comtruefalse
ID: 8
EmailType: WindowsLiveID
Address: askdaa@sina.com
IsIMEnabled: true
IsDefault: false
*
ID: 848495f7-513d-4a40-b417-01b93e8c2cee
WindowsLiveID: aaa@msn.com
AutoUpdateEnabled: false
LastChanged: 2006-03-16T03:12:57.8800000Z
Profiles: asdasdsadChenseMname
UniqueName: asd
SortName: asdsad
NickName: Chense
DisplayName: Mname
Emails: 8WindowsLiveIDaskdaa@sina.comtruefalse
ID: 8
EmailType: WindowsLiveID
Address: askdaa@sina.com
IsIMEnabled: true
IsDefault: false

*/
}

static XPathNavigator ReturnValue(XPathNavigator xPathNavigator)
{
if (xPathNavigator.NodeType == XPathNodeType.Element)
{
if (xPathNavigator.HasChildren)
{
xPathNavigator.MoveToFirstChild();
do
{
if (xPathNavigator.HasChildren)
{
xPathNavigator.MoveToFirstChild();
do
{
Console.Write("{0}:\t{1}\r\n", xPathNavigator.Name, xPathNavigator.Value);
ReturnValue(xPathNavigator);
}
while (xPathNavigator.MoveToNext());
xPathNavigator.MoveToParent();
}
} while (xPathNavigator.MoveToNext());
xPathNavigator.MoveToParent();
}
}
return xPathNavigator;

}


这个Emails没完全分离,操,
jiangshun 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qiuqingpo 的回复:]

引用 10 楼 jiangshun 的回复:

C# code
static void Main(string[] args)
{
XPathNavigator xPathNavigator;
XPathDocument xPathDoc;

xPathDoc = new XPathDocument("C:\\test.xml");


……

非常感谢不逆.不过能不能……
[/Quote]

可以肯定是可以,无非是多个判断和循环巴了,但是假如要有几十个几百个呢?

看来的写个递归了
qiuqingpo 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jiangshun 的回复:]

C# code
static void Main(string[] args)
{
XPathNavigator xPathNavigator;
XPathDocument xPathDoc;

xPathDoc = new XPathDocument("C:\\test.xml");


……
[/Quote]
非常感谢不逆.不过能不能把Profiles和Emails也拆开呢?
jiangshun 2010-11-12
  • 打赏
  • 举报
回复
        static void Main(string[] args)
{
XPathNavigator xPathNavigator;
XPathDocument xPathDoc;

xPathDoc = new XPathDocument("C:\\test.xml");


xPathNavigator = xPathDoc.CreateNavigator();

xPathNavigator.MoveToRoot();

xPathNavigator.MoveToFirstChild();

if (xPathNavigator.NodeType == XPathNodeType.Element)
{

if (xPathNavigator.HasChildren == true)
{

xPathNavigator.MoveToFirstChild();
do
{
if (xPathNavigator.HasChildren)
{
xPathNavigator.MoveToFirstChild();
do
{
Console.Write("{0}:\t{1}\r\n", xPathNavigator.Name, xPathNavigator.Value);
} while (xPathNavigator.MoveToNext());

xPathNavigator.MoveToParent();
}
Console.WriteLine("\r\n");

} while (xPathNavigator.MoveToNext());
}
}

Console.ReadKey();
}
/*
ID: 848495f7-513d-4a40-b417-01b93e8c2cee
WindowsLiveID: aaa@msn.com
AutoUpdateEnabled: false
LastChanged: 2006-03-16T03:12:57.8800000Z
Profiles: asdasdsadChenseMname
Emails: 8WindowsLiveIDaskdaa@sina.comtruefalse


ID: 848495f7-513d-4a40-b417-01b93e8c2cee
WindowsLiveID: aaa@msn.com
AutoUpdateEnabled: false
LastChanged: 2006-03-16T03:12:57.8800000Z
Profiles: asdasdsadChenseMname
Emails: 8WindowsLiveIDaskdaa@sina.comtruefalse
*/
蝶恋花雨 2010-11-12
  • 打赏
  • 举报
回复
  
string resHtml=@" 加入你的XML "; XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(resHtml);
XmlNodeList xnl = xmlDoc.SelectSingleNode("Contacts").ChildNodes;
string aa = string.Empty;
foreach (XmlNode linke in xnl)
{
aa += linke.InnerText;
}
q107770540 2010-11-12
  • 打赏
  • 举报
回复
e滴神~~~
囧~~
qiuqingpo 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 q107770540 的回复:]

C# code

void Main()
{
string xml = @" <Contacts>
<Contact>
<ID>848495f7-513d-4a40-b417-01b93e8c2cee</ID>
……
[/Quote]
我才2.0.这个linq还不能用呢!
q107770540 2010-11-12
  • 打赏
  • 举报
回复

void Main()
{
string xml = @" <Contacts>
<Contact>
<ID>848495f7-513d-4a40-b417-01b93e8c2cee</ID>
<WindowsLiveID>aaa@msn.com</WindowsLiveID>
<AutoUpdateEnabled>false</AutoUpdateEnabled>
<LastChanged>2006-03-16T03:12:57.8800000Z</LastChanged>
<Profiles>
<Personal>
<UniqueName>asd</UniqueName>
<SortName>asdsad</SortName>
<NickName>Chense</NickName>
<DisplayName>Mname</DisplayName>
</Personal>
</Profiles>
<Emails>
<Email>
<ID>8</ID>
<EmailType>WindowsLiveID</EmailType>
<Address>askdaa@sina.com</Address>
<IsIMEnabled>true</IsIMEnabled>
<IsDefault>false</IsDefault>
</Email>
</Emails>
</Contact>

<Contact>
<ID>848495f7-513d-4a40-b417-01b93e8c2cee</ID>
<WindowsLiveID>aaa@msn.com</WindowsLiveID>
<AutoUpdateEnabled>false</AutoUpdateEnabled>
<LastChanged>2006-03-16T03:12:57.8800000Z</LastChanged>
<Profiles>
<Personal>
<UniqueName>asd</UniqueName>
<SortName>asdsad</SortName>
<NickName>Chense</NickName>
<DisplayName>Mname</DisplayName>
</Personal>
</Profiles>
<Emails>
<Email>
<ID>8</ID>
<EmailType>WindowsLiveID</EmailType>
<Address>askdaa@sina.com</Address>
<IsIMEnabled>true</IsIMEnabled>
<IsDefault>false</IsDefault>
</Email>
</Emails>
</Contact>
</Contacts>";
XElement xmlPage = XElement.Parse(xml);
var q = from x in xmlPage.Descendants("Contact")
select new
{
ID=x.Element("ID").Value,
WindowsLiveID = x.Element("WindowsLiveID").Value,
AutoUpdateEnabled = x.Element("AutoUpdateEnabled").Value,
LastChanged = x.Element("LastChanged").Value,
UniqueName = x.Element("Profiles").Element("Personal").Element("UniqueName").Value,
SortName = x.Element("Profiles").Element("Personal").Element("SortName").Value,
NickName = x.Element("Profiles").Element("Personal").Element("NickName").Value,
DisplayName = x.Element("Profiles").Element("Personal").Element("DisplayName").Value,
EmailID = x.Element("Emails").Element("Email").Element("ID").Value,
EmailType = x.Element("Emails").Element("Email").Element("EmailType").Value,
Address = x.Element("Emails").Element("Email").Element("Address").Value,
IsIMEnabled = x.Element("Emails").Element("Email").Element("IsIMEnabled").Value,
IsDefault = x.Element("Emails").Element("Email").Element("IsDefault").Value
};
Console.WriteLine("------------------");
foreach(var q1 in q)
{
Console.WriteLine(q1.ID);
Console.WriteLine(q1.WindowsLiveID);
Console.WriteLine(q1.AutoUpdateEnabled);
Console.WriteLine(q1.LastChanged);
Console.WriteLine(q1.UniqueName);
Console.WriteLine(q1.SortName);
Console.WriteLine(q1.NickName);
Console.WriteLine(q1.DisplayName);
Console.WriteLine(q1.EmailID);
Console.WriteLine(q1.EmailType);
Console.WriteLine(q1.Address);
Console.WriteLine(q1.IsIMEnabled);
Console.WriteLine(q1.IsDefault);
Console.WriteLine("------------------");
}
}

/*

------------------
848495f7-513d-4a40-b417-01b93e8c2cee
aaa@msn.com
false
2006-03-16T03:12:57.8800000Z
asd
asdsad
Chense
Mname
8
WindowsLiveID
askdaa@sina.com
true
false
------------------
848495f7-513d-4a40-b417-01b93e8c2cee
aaa@msn.com
false
2006-03-16T03:12:57.8800000Z
asd
asdsad
Chense
Mname
8
WindowsLiveID
askdaa@sina.com
true
false
------------------

*/

qiuqingpo 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhouyongli41 的回复:]

循环一下取出值,这没多大问题吧
[/Quote]
你仔细看一下格式.还是有点难度的
qiuqingpo 2010-11-12
  • 打赏
  • 举报
回复
直接得到值就行了.
如:
string id+=ID;
subxli 2010-11-12
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="utf-8" ?>
<aaa>
<bbbb type="1">
<cccc PageName="2">
<Item key="" value="" />
<Item key="" value="" />
<Item key="" value="" />
<Item key="" value="" />
<Item key="" value="" />
</ccc>
</bbb>
</aaa>

aaa/bbbb[@type='1']/cccc[@PageName='2'] 直接读取到ccc的节点
zhouyongli41 2010-11-12
  • 打赏
  • 举报
回复
循环一下取出值,这没多大问题吧
misswangjinfeng 2010-11-12
  • 打赏
  • 举报
回复
请问你要用什么形式呈现xml中的值呢?比如用treeview控件,还是什么?

62,271

社区成员

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

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

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

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