【问题标题】:How to read in all the data with a certain tag in an XML file using c#?如何使用 C# 在 XML 文件中读取具有特定标记的所有数据?
【发布时间】:2017-10-22 18:30:12
【问题描述】:

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

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

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

【问题讨论】:

  • 您是否考虑过只使用 XML 序列化程序?然后你可以遍历一个对象列表
  • 解析xml的方式有很多种。当您解析整个 xml 时,序列化是一种很好的方法。如果你只需要得到一个对象,我推荐 xml linq。

标签: c# xml hash md5


【解决方案1】:
  1. 使用我的回答 here 创建一个代表您的 XML 的 C# 类。
  2. 使用XmlSerializer 反序列化 XML 文件的内容。
  3. 对反序列化的内容做任何你想做的事情。

以下是第 1 步将为您生成的类:

/// <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);
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2017-12-25
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2011-01-27
      • 2011-08-15
      相关资源
      最近更新 更多