【问题标题】:C# XDocument - Get value of an attribute in an XML file [duplicate]C# XDocument - 获取 XML 文件中属性的值 [重复]
【发布时间】:2019-01-22 03:54:41
【问题描述】:

到目前为止,这是我的代码:

XDocument document = XDocument.Load("C:\\modinfo.xml");

        var elements = from r in document.Descendants("Mod")
                       select new
                       {
                           Author = r.Element("Author").Value,
                           Description = r.Element("Description").Value
                       };

        foreach (var r in elements)
        {
            Console.WriteLine("AUTHOR = " + r.Author + Environment.NewLine + "DESCRIPTION = " + r.Description);
        }

这是我的“modinfo.xml”文件:

<Mod Name="Mod Name">
  <Author>Author Name</Author>
  <Description>Description Text</Description>
</Mod>

目前看来

当我运行应用程序时。我想做的是让它也打印“Mod Name”。

【问题讨论】:

  • 不过我已经用过了。对于如何使这些事情与我所做的事情一起工作,我不是一个完整的专家。仅在使用答案中给出的那行代码时才会出错。
  • 那是您的准确 XML 文件吗?
  • 是的,这就是我的 XML 文件中的所有内容,也是我正在使用的那个。
  • 实际上,不是。我太笨了!我一直在编辑错误的文件,对此感到抱歉。我以为我正在编辑我在项目中使用的那个..

标签: c# xml linq visual-studio-2017


【解决方案1】:

只需在您的匿名类型中选择 Mod 名称:

 var elements = from r in document.Descendants("Mod")
                       select new
                       {
                           ModName = r.Attribute("Name").Value,
                           Author = r.Element("Author").Value,
                           Description = r.Element("Description").Value
                       };

foreach (var r in elements)
{
    Console.WriteLine("MOD Name = " + r.ModName + Environment.NewLine +  "AUTHOR = " + r.Author + Environment.NewLine + "DESCRIPTION = " + r.Description);
}

【讨论】:

  • 我在使用它时遇到错误:“System.NullReferenceException: '对象引用未设置为对象的实例。' System.Xml.Linq.XElement.Attribute(...) 返回 null。"
  • 那么你有没有设置名称的元素。试试 ModName = r.Attribute("Name").Value ?? “未设置”,
  • 成功了,谢谢。我不小心编辑了错误的文件,并且两个文件都有不同的内容。很抱歉。
【解决方案2】:

如果这是您的完整 xml,以下内容应该对您有所帮助,因为您没有多个 Mod。

XElement xmlTree = XElement.Parse(str);  
var result = new {
    Author = xmlTree.Element("Author").Value,
    Description = xmlTree.Element("Description").Value,
    Name =xmlTree.Attribute("Name").Value
};

输入

<Mod Name="Mod Name">
  <Author>Author Name</Author>
  <Description>Description Text</Description>
</Mod>

输出

Author : Author Name 
Description : Description Text 
Name :Mod Name 

【讨论】:

  • 谢谢!但是已经得到了不同的答案,我正在编辑错误的文件。现在都修好了!很抱歉浪费了您的时间。
猜你喜欢
  • 2012-06-30
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
相关资源
最近更新 更多