【问题标题】:C#: Filling an XML FileC#:填充 XML 文件
【发布时间】:2020-05-15 04:19:00
【问题描述】:

所以我已经有一个 XML 文件,其中包含很多元素,但其中没有任何价值。现在我想在已经存在的 XML 文件中插入一些值。 所以我创建了一个 XmlWriter 和一个 XmlReader。 之后,我开始编写 XMLDocument 并从阅读器中复制所有内容,如下所示:

xmlWriter.WriteStartDocument();
xmlWriter.WriteNode(reader, true);

如果我就这样离开它(当然最后是xmlWriter.WriteEndDocument();xmlWriter.Close();),那么我将拥有一个新的 XML 文件,它与我的默认文件完全相同。

我现在的问题是: 是否可以添加一些值然后保护这个新的 XML 文件?所以基本上是默认值 + 值的副本。

如果您想知道,我所说的值是什么意思,我指的是“TestUser”,如下所示:

<User>TestUser</User>

我在互联网上做了一些研究如何做到这一点,但遗憾的是我找不到任何东西。

感谢您的帮助!

编辑:

我的 XML 看起来像这样(当然更大,这只是一个小例子):

<users>
    <user></user>
    <user></user>
</users>

我希望这个 XML 被复制一些附加值,例如:

<users>
    <user>TestUser1</user>
    <user>TestUser2</user>
</users>

【问题讨论】:

  • 除非您正在处理大量 XML 文档 (>100MB),否则使用 XDocument 和相关文件要容易得多。
  • 微软有很好的documentation。使用序列化器读取模板,填写值,然后再次使用序列化器将值写入文件
  • @Mitch 你能给我看一个例子吗?我现在已经试过了,我又在同一点上。我得到了 XML 的“副本”,但我不知道如何将这些值添加到这些元素中。
  • c-sharpcorner.com/article/xml-manipulation-in-c-sharp 看起来相当完整,但使用 XElement 或 XDocument 进行的一些搜索应该可以阐明。
  • Mitch 你能给我看一个例子吗? - 为此,我们需要一个完整的 XML 示例——即minimal reproducible example——显示你卡在哪里,我们可以粘贴到控制台应用程序或fiddle 并运行。

标签: c# xml xmlreader xmlwriter


【解决方案1】:

因此您可以在此处使用此类并打开您需要记住的所需 XML 以使用对象并使用不同的路径保存新文件,或者只是在 _Serialize(string filePath, T object)

    public static StreamReader _StreamReader(string filePath)
    {
        try
        {
            if (string.IsNullOrEmpty(filePath))
            {
                throw new InvalidOperationException();
            }

            return new StreamReader(filePath);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    public static void _Serialize<T>(string filePath, T object)
    {
        try
        {
            var xmlSerializer = new XmlSerializer(object.GetType());
            using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
            {
                xmlSerializer.Serialize(fileStream, object);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    public static T _UnSerialize<T>(StreamReader streamReader)
    {
        try
        {
            T deserializedObject = default(T);
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
            deserializedObject = (T)xmlSerializer.Deserialize(streamReader);
            streamReader.Dispose();
            return deserializedObject;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2013-07-28
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多