C#解析以下XML,不知道如何

时间:2012-10-02 09:21:44

标签: c# xml parsing xmlreader

我的例子是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”以及一般如何处理..帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

听起来有点像使用XmlSerializer方法可以从Deserialize()中受益。

以下是一些显示示例的链接:

C# - How to xml deserialize object itself?

C# Deserialize XML to object

我认为这是一种可行的方法,否则您可以将其解析为XDocumentXmlDocument并使用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}}

不确定使用哪种技术,请看一下:

Parse()

我甚至设法从Google找到一个可以帮助您入门的示例:XDocument or XmlDocument

另一种方法是使用Linq2Xml技术,这是另一个问题,它将向您展示如何实现:

http://www.codeproject.com/Articles/169598/Parse-XML-Documents-by-XMLDocument-and-XDocument

以下是答案基于以下内容的博文:

Reading Xml with XmlReader in C#

答案 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;
}