我的例子是XML:
string xml =
@"<plist version='1.0'>
<dict>
<key>DataType</key>
<string>Employee</string>
<key>8000</key>
<dict>
<key>Id</key>
<string>8000</string>
<key>Prename</key>
<string>Walter</string>
<key>Name</key>
<string>Walter Lohner Stans</string>
<key>Initials</key>
<string>MAL</string>
</dict>
<key>8001</key>
<dict>
<key>Id</key>
<string>8001</string>
<key>Prename</key>
<string>Motorrad</string>
<key>Name</key>
<string> Meierskappel</string>
<key>Initials</key>
<string>MAM</string>
</dict>
<key>8004</key>
<dict>
<key>Id</key>
<string>8004</string>
<key>Prename</key>
<string>Hanspeter</string>
<key>Name</key>
<string>Altenbürger AG Horgen</string>
<key>Initials</key>
<string>FH</string>
</dict>
</dict>
</plist>";
我想将这3名员工作为名单......
班级员工也被定义:
//Class
public class Employee
{
//Properties
public string Id { get; set; }
public string Prename { get; set; }
public string Name { get; set; }
public string Initials { get; set; }
}
如果我通过示例现在想要将xml传递给方法并且希望拥有这些3个Employees的List(类型为Employees),那么解析现在如何工作?
我开始做类似的事情:
public List<Employee> GetEmployees(string xml)
{
using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
}
}
但实际上我不知道如何迭代所有描述一个员工的“dicts”以及一般如何处理..帮助将不胜感激。
答案 0 :(得分:2)
听起来有点像使用XmlSerializer
方法可以从Deserialize()
中受益。
以下是一些显示示例的链接:
C# - How to xml deserialize object itself?
我认为这是一种可行的方法,否则您可以将其解析为XDocument
或XmlDocument
并使用XPath浏览文档。顺便说一句,您可以使用XmlDocument
上的Load()
方法加载XML字符串
string xmlString = "<root><sub></sub></root>";
XmlDocument doc = new XmlDocument();
doc.Load(xmlString);
或XDocument
string str =
@"<Root>
<Child>Content</Child>
</Root>";
XDocument doc = XDocument.Parse(str);
方法将XML字符串加载到对象中。
{{1}}
不确定使用哪种技术,请看一下:
我甚至设法从Google找到一个可以帮助您入门的示例:XDocument or XmlDocument
另一种方法是使用Linq2Xml技术,这是另一个问题,它将向您展示如何实现:
http://www.codeproject.com/Articles/169598/Parse-XML-Documents-by-XMLDocument-and-XDocument
以下是答案基于以下内容的博文:
答案 1 :(得分:1)
我建议你这样对你有用。
string xmlpath = "D:\new\test.xml";
XmlDocument doc = new XmlDocument();
doc.Load(xmlpath);
XmlElement root = doc.DocumentElement;
XmlNodeList employ = root.GetElementsByTagName("Employee");
list<employee> employees=new <employee>();
foreach (XmlElement emp in employ)
{
string id = emp.GetAttribute("id");
string name = emp.GetAttribute("name");
string desc = emp.GetAttribute("Prename");
Employee e=new employee();
e.id=id;
e.Prename =desc;
e.Name=name;
employees.add(e);
}
答案 2 :(得分:1)
使用LINQ2XML ..它是 COOL
XElement doc=XElement.Parse(".......");
var yourList=doc.Descendants("dict").Descendants("dict").Select(
x=>new Employee
{
Id=x.Elements("string").ElementAt(0).Value,
Prename=x.Elements("string").ElementAt(1).Value,
Name=x.Elements("string").ElementAt(2).Value,
Initials=x.Elements("string").ElementAt(3).Value
}
);
答案 3 :(得分:0)
尝试使用以下内容:
XmlDocument x=new XmlDocument();
x.LoadXml(xml);
foreach (XmlNode x1 in x.SelectNodes("//dict"))
{
string Id=x1.SelectSingleNode("dict[key[text()='Id']]/string").InnerText;
}