我有一个问题,我想在我的XML文件中获取嵌套元素的值。
-<Modules>
-<Modules4>
-<Module>
<Name>dasd</Name>
<Code>dasdasdas</Code>
<Credits>40</Credits>
</Module>
-<Module>
<Name>dasdasd</Name>
<Code>dasdasd</Code>
<Credits>40</Credits>
</Module>
</Modules4>
<Modules5/>
<Modules6/>
</Modules>
这是XML文件,我试图创建一个条件,如果读者找到“Modules4”元素,然后获得嵌套元素“名称”,“代码”和“信用”,如果这个问题已被回答,请指导我,因为我无法在任何地方找到它。
using (XmlReader reader = XmlReader.Create("SavedData.xml"))
while (reader.Read())
{
if (reader.IsStartElement())
{
if (reader.Name == "Modules4"){
switch (reader.Name)
{
case "Name":
string name = reader.ReadString();
Console.WriteLine(name);
break;
case "Code":
string Code = reader.ReadString();
Console.WriteLine(Code);
break;
case "Credits":
break;
}
}
}
}
}
这是我的代码。
感谢。
答案 0 :(得分:0)
您当前代码存在的问题是switch
仅在reader.Name
"Modules4"
时才会到达,而不是其中一个孩子。
如果我是你,我会使用ReadSubtree()
方法:
...
if (reader.IsStartElement())
{
if (reader.Name == "Modules4")
{
ReadModules4(reader.ReadSubtree());
}
}
...
然后您可以使用单独的方法处理子树:
void ReadModules4(XmlReader reader)
{
while (reader.Read())
{
switch (reader.Name)
{
...
}
}
}
答案 1 :(得分:0)
我喜欢使用xml阅读器和xml linq的组合
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
reader.ReadToFollowing("Modules4");
XmlReader module4Subtree = reader.ReadSubtree();
while (!module4Subtree.EOF)
{
if (module4Subtree.Name != "Module")
{
module4Subtree.ReadToFollowing("Module");
}
if (!module4Subtree.EOF)
{
XElement module = (XElement)XElement.ReadFrom(module4Subtree);
Module.modules.Add(new Module() { name = (string)module.Element("Name"), code = (string)module.Element("Code"), credits = (int)module.Element("Credits") });
}
}
}
}
public class Module
{
public static List<Module> modules = new List<Module>();
public string name { get; set; }
public string code { get; set; }
public int credits { get; set; }
}
}