【问题标题】:The easiest way to populate a collection from XML file in .NET在 .NET 中从 XML 文件填充集合的最简单方法
【发布时间】:2009-08-26 15:18:25
【问题描述】:

我有以下 XML 文件:

<?xml version="1.0" encoding="utf-8" ?>
<scripts>
  <ScriptName>
    <name>
        "My Name"
    </ScriptName>
    <ScriptBody>
        "body contents"
    </ScriptBody>
  </script>
</scripts>

还有以下对象:

    public class DbScript
{
    #region Constructors
    public DbScript()
        : this(string.Empty, string.Empty)
    {
    }
    public DbScript(string name, string body)
    {
        ScriptName = name;
        ScriptBody = body;
    }
    #endregion
    #region Properties
    /// <summary>
    /// Script name
    /// </summary>
    public string ScriptName { get; set; }
    /// <summary>
    /// Script body
    /// </summary>
    public string ScriptBody { get; set; }
    #endregion
}

从 XML 文件的内容中填充 DBScript 对象集合的最快方法是什么?我应该研究序列化程序吗?

谢谢!

【问题讨论】:

  • 您的 XML 格式不正确。如果没有格式良好的 XML,您将无法做很多事情。

标签: .net xml xml-serialization


【解决方案1】:

使用 .Net 序列化绝对是我的首选,在这种情况下,您可以将文件反序列化为对象。如果你拿你的 xml(我编辑了一下):

<?xml version="1.0" encoding="utf-8" ?>
<scripts>
  <script>
    <ScriptName>
        "My Name"
    </ScriptName>
    <ScriptBody>
        "body contents"
    </ScriptBody>
  </script>
</scripts>

然后你创建一些代表 xml 的类:

public class Scripts
{

  /// <summary>
  /// only allow xml serializer to create instances.
  /// </summary>
  private Scripts()
  {        
  }
  [XmlElement]
  public List<script> script{ get; set; }
}
public class script
{
  public script()
  {
  }

  [XmlElement]
  public string ScriptName { get; set; }

  [XmlElement]
  public string ScriptBody{ get; set; }
}

然后当一切设置正确后,您可以反序列化文件:

string xmlFilePath = "THE_PATH_TO_THE_XML";
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Scripts));
using (XmlReader xmlReader = XmlReader.Create(xmlFilePath))
{
    Scripts scripts = (Scripts)xmlSerializer.Deserialize(xmlReader);
}

Xml 序列化真的很强大,请查看文档:http://msdn.microsoft.com/en-us/library/ms950721.aspx

抢劫

【讨论】:

  • -1 用于使用XmlTextReader 而不是XmlReader.Create,并且用于不实现using 块。
  • 是的 XmlReader.Create 是要走的路,没有意识到这一点。而且,很好地抓住了 using 语句...
【解决方案2】:

假设您打算像这样键入 XML 语法:

<?xml version="1.0" encoding="utf-8" ?>
<scripts>
  <script>
    <ScriptName>
        "My Name"
    </ScriptName>
    <ScriptBody>
        "body contents"
    </ScriptBody>
  </script>
</scripts>

然后这段代码应该解析它。未经测试。

var doc = XDocument.Load("input.xml");
var x = from script in doc.Descendants("scripts").Descendants("script")
        select new {
            Name = script.Element("ScriptName").Value,
            Body = script.Element("ScriptBody").Value
        };

【讨论】:

    【解决方案3】:
        var document = XElement.Load(fileName);
        var collection = from elem in document.Elements("script")
                         select new DBScript(
                                      elem.Element("ScriptName").Value,
                                      elem.Element("ScriptBody").Value
                                    );
    

    会为你解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多