C#:填充XML文件

C#:填充XML文件,c#,xml,xmlreader,xmlwriter,C#,Xml,Xmlreader,Xmlwriter,所以我已经有了一个XML文件,它包含了很多元素,但是没有任何价值。现在我想在已经存在的XML文件中插入一些值。 所以我创建了一个XmlWriter和一个XmlReader。 之后,我开始编写XMLDocument,并从读者那里复制了所有内容,如下所示: xmlWriter.WriteStartDocument(); xmlWriter.WriteNode(reader, true); 如果我就这样离开它(当然,最后是xmlWriter.WriteEndDocument();和xmlWriter

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

xmlWriter.WriteStartDocument();
xmlWriter.WriteNode(reader, true);
如果我就这样离开它(当然,最后是
xmlWriter.WriteEndDocument();
xmlWriter.Close();
),那么我将拥有一个新的XML文件,它是我默认文件的精确副本

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

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

<User>TestUser</User>
TestUser
我在互联网上做了一些研究,但遗憾的是,我什么也找不到

谢谢你的帮助

编辑:

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


我希望复制此XML时添加一些附加值,例如:

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

TestUser1
TestUser2

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

publicstaticstreamreader\u StreamReader(字符串文件路径)
{
尝试
{
if(string.IsNullOrEmpty(filePath))
{
抛出新的InvalidOperationException();
}
返回新的StreamReader(文件路径);
}
捕获(例外情况除外)
{
掷骰子;
}
}
公共静态void\u序列化(字符串文件路径,T对象)
{
尝试
{
var xmlSerializer=新的xmlSerializer(object.GetType());
使用(FileStream FileStream=newfilestream(filePath,FileMode.Create))
{
序列化(文件流,对象);
}
}
捕获(例外情况除外)
{
掷骰子;
}
}
公共静态T_非序列化(StreamReader StreamReader)
{
尝试
{
T反序列化对象=默认值(T);
XmlSerializer XmlSerializer=新的XmlSerializer(typeof(T));
反序列化对象=(T)xmlSerializer.Deserialize(streamReader);
streamReader.Dispose();
返回反序列化对象;
}
捕获(例外情况除外)
{
掷骰子;
}
}

除非您使用的是海量XML文档(>100MB),否则使用
XDocument
和相关文档要容易得多。Microsoft有很好的优势。使用序列化程序读取模板,填写值,然后再次使用序列化程序将值写入模板file@Mitch你能给我举个例子吗?我现在已经试过了,我再一次站在同一点上。我得到了XML的“副本”,但我不知道如何将这些值添加到这些元素中。看起来相当完整,但是使用XElement或XDocument进行的一些搜索应该是很清楚的。米奇,你能给我举个例子吗要做到这一点,我们需要一个完整的XML示例——即a——显示您被卡住的地方,我们可以将其粘贴到控制台应用程序或运行。
<users>
    <user>TestUser1</user>
    <user>TestUser2</user>
</users>
    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;
        }
    }