我如何将XML文件解析为列表

时间:2017-11-16 21:00:30

标签: c# xml visual-studio

列表:

List<string> list = new List<string>();

XML文件:

<memberlist>
 <member>
  <name>Name</name>
  <status>Status</status>
 </member>
</memberlist>

我如何解析这个文件,让(file.xml)进入列表?

我尝试了很多方法,但似乎都没有。

我想查看状态是否为'gold',如果是,我想将该成员的名字放入列表中。

4 个答案:

答案 0 :(得分:0)

您应该使用System.Xml.Linq;

using (FileStream fileStramWrite = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))   
 using (StreamReader streamReader = new StreamReader(fileStramWrite))
                    {
                        var xdoc = XDocument.Load(streamReader);
                        var xElement = xdoc.Element("memberlist");
                        var xElement2 = xElement.Element("member");
                        var name = xElement2.Element("name").Value;
                        var status = xElement2.Element("status").Value;
                    }

答案 1 :(得分:0)

将xml加载到XDocument。您可以从文件中执行此操作,我已经从字符串中进行了演示。

对名为&#34; status&#34;的元素执行linq查询(在&#34;会员&#34;内),其价值也为&#34; gold&#34;。

其中,抓住&#34; name&#34;的价值。元件。

在字符串列表中使用AddRange

List<string> lstGolds = new List<string>();

string xml ="<memberlist><member><name>Name</name><status>gold</status></member></memberlist>";
XDocument doc = XDocument.Parse(xml);

var goldStatus = doc.Descendants("member")
    .Where(d => d.Element("status").Value == "gold")
    .Select(d => d.Element("name").Value);

lstGolds.AddRange(goldStatus);

答案 2 :(得分:0)

您可以使用LINQ

XElement xml = XElement.Load("locationToYourXmlFile");

var members = xml.Elements("member");
var list  = members.Where(member => member.Element("status")?.Value == "Gold")
                   .Select(member => member.Element("name")?.Value)
                   .ToList();

假设您的XML在根memberlist元素下有一堆成员元素,每个元素都包含namestatus元素。

<?xml version="1.0" encoding="utf-8"?>
<memberlist>
    <member>
        <name>John</name>
        <status>Gold</status>
    </member>
    <member>
        <name>Sam</name>
        <status>Silver</status>
    </member>
    <member>
        <name>Sara</name>
        <status>Gold</status>
    </member>
</memberlist>

答案 3 :(得分:0)

将您的XML转换为对象列表....

使用这两个方法:

public static string Serialize<T>(T dataToSerialize)
{
    try
    {
        var stringwriter = new ISOEncodingStringWriter();
        var serializer = new XmlSerializer(typeof(T));

        var xns = new XmlSerializerNamespaces();
        xns.Add(string.Empty, string.Empty);

        serializer.Serialize(stringwriter, dataToSerialize, xns);
        return stringwriter.ToString();
    }
    catch
    {
        throw;
    }
}

public static T Deserialize<T>(string xmlText)
{
    try
    {
        var stringReader = new System.IO.StringReader(xmlText);
        var serializer = new XmlSerializer(typeof(T));
        return (T)serializer.Deserialize(stringReader);
    }
    catch
    {
        throw;
    }
}

在您提供以下属性的位置创建以下类

[XmlRoot(ElementName = "Members", Namespace = "")]
public class Members
{
    [XmlElement("Member")]
    public Member[] member { get; set; }
}

public class Member
{
    [XmlElementAttribute("Name")]
    public string Name { get; set; }

    [XmlElementAttribute("Status")]
    public string Status { get; set; }
}

然后反序列化您的数据。

Members result = Deserialize<Members>(XML_String);

你有一个数组中的成员,如果你愿意,你可以将其转换为一个列表。