如何使用c#读入XML文件中带有特定标签的所有数据?

How to read in all the data with a certain tag in an XML file using c#?

我正在创建一个 Windows 服务来检查系统上安装的软件的完整性,方法是为正在安装的软件创建 MD5 散列并将其与已验证软件的 MD5 散列进行比较。经过验证的哈希值包含在 XML 文件中,如下所示:

<AppList>
<VLC>
<Path>C:Program Files\VLC\VLC.exe</Path>
<MD5GoldenHash> 1f74882b7a5c8a6ca38912df9786c1cc</MD5GoldenHash>
</VLC>
…
</AppList>

如何在c#中读入所有带有MD5GoldenHash标签的数据,以便我可以将正在安装的软件的MD5哈希值与已经验证过的哈希值进行比较?任何帮助或提示将不胜感激。

  1. 使用我的回答 创建一个 C# class 代表您的 XML.
  2. 使用 XmlSerializer 反序列化 XML 文件的内容。
  3. 用反序列化的东西做任何你想做的事。

这是第 1 步将为您生成的 classes:

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class AppList
{

    private AppListVLC[] vLCField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("VLC")]
    public AppListVLC[] VLC
    {
        get
        {
            return this.vLCField;
        }
        set
        {
            this.vLCField = value;
        }
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class AppListVLC
{

    private string pathField;

    private string mD5GoldenHashField;

    /// <remarks/>
    public string Path
    {
        get
        {
            return this.pathField;
        }
        set
        {
            this.pathField = value;
        }
    }

    /// <remarks/>
    public string MD5GoldenHash
    {
        get
        {
            return this.mD5GoldenHashField;
        }
        set
        {
            this.mD5GoldenHashField = value;
        }
    }
}

下面是序列化和反序列化的方法:

public static void Main()
{
    var serializer = new XmlSerializer(typeof(AppList));
    var reader = new StreamReader("YourFile.xml");
    var result = serializer.Deserialize(reader) as AppList;
    reader.Close();
    foreach (var thisVlc in result.VLC)
    {
        Console.WriteLine(thisVlc.MD5GoldenHash);
    }

    // if you want to make changes to xml file then do the following
    result.VLC[0].MD5GoldenHash = "Something to show modificaition";
    serializer.Serialize(new StreamWriter("YourFileOrSomeOtherFile.xml"), result);
}

我发现我可以读取特定标签的数据并将其放入这样的列表中:

private List<string> getGoldenHashes(string xml)
    {
        List<string> list = new List<string>();
        int i = 0;

        XDocument doc = XDocument.Load(xml);
        var goldHashes = doc.Descendants("MD5GoldenHash");

        foreach (var gh in goldHashes)
        {
            list.Add(gh.Value.ToString());                
        }


        return list;

    }