【问题标题】:C# loop through attributes inside xml fileC#循环遍历xml文件中的属性
【发布时间】:2020-04-28 15:09:09
【问题描述】:

我对 C# 非常陌生,但我试图制作一个应用程序来解析一个简单的 XML 文件,如下所示,并在多列 ListView 中填充数据。

<mods>
<mod Name="mod1.zip" sha1="508ed8f5fcd7d323d9296acad76f1183b810f62a"/>
<mod Name="mod2.zip" sha1="669d8d09d297a9724fe1d1d676ac5f5a8ff10277"/>
</mods>

这是我尝试使用的代码,但它没有像我期望的那样填充 ListView..

modList.View = View.Details;
modList.Columns.Add("Name", 650);
modList.Columns.Add("Status", 111, HorizontalAlignment.Center);

XElement root = XElement.Load("https://website.com/modlist.xml");
var mods = from subject in root.Descendants()
            where subject.Name.LocalName.Contains("Mod")
            select new
            {
                Name = subject.Element("Name").Value,
                Hash = subject.Element("Hash").Value,
            };

foreach (var mod in mods)
{
    modList.Items.Add(new ListViewItem(new string[]
        {
            mod.Name,
            mod.Hash
        }));

}

【问题讨论】:

  • 您正在寻找Mod 元素,但它们都是mod 元素。您还在寻找名为NameHash元素,但它们实际上是名为Namesha1属性。 (不清楚你为什么使用Contains 而不仅仅是使用root.Descendants("mod")。)
  • 您的 XML 元素没有称为 Hash 的属性,而是根据您的上述代码 sn-p 为 sha1、sha2。这可能是它不会查找和填充 Hash 属性的原因。

标签: c# xml


【解决方案1】:

您可以使用Descendants("mod") 获取所有模组。并且属性使用Attribute("Name")

var mods = from ele in xDoc.Descendants("mod")
                    select new
                    {
                        Name = (string)ele.Attribute("Name"),
                        Hash = (string)ele.Attribute("sha1")
                    };

Demo

您可以使用Attributes() 列出所有属性。 如果您必须处理 SHA-1、SHA-2 或 SHA-256 属性中的 Hashbeeing

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多