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