C# 保存前检查XML文件中是否已存在文本
这是我的保存方法C# 保存前检查XML文件中是否已存在文本,c#,windows-forms-designer,C#,Windows Forms Designer,这是我的保存方法 private void textBox1_TextChanged(object sender, EventArgs e) { if (string.IsNullOrEmpty(txtAPI.Text) || string.IsNullOrEmpty(txtVerC.Text)) { BTAPIConfirm.Visible = false; } else {
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtAPI.Text) || string.IsNullOrEmpty(txtVerC.Text))
{
BTAPIConfirm.Visible = false;
}
else
{
BTAPIConfirm.Visible = true;
}
}
public void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtAPI.Text))
{
MessageBox.Show("There is nothing to enter", "Try again", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
else
{
Serialization info = new Serialization();
info.APIKEY = txtAPI.Text;
info.VCODE = txtVerC.Text;
info.ID = Guid.NewGuid().ToString();
list.Add(info);
Serialization.SaveData(list, "data.XML");
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void whatIsThisToolStripMenuItem_Click(object sender, EventArgs e)
{
}
// end of UCAPIn
public List<Serialization> list = null;
private void UCAPIn_Load(object sender, EventArgs e)
{
list = new List<Serialization>();
if (File.Exists("data.XML"))
{
var doc = XDocument.Load("data.XML");
foreach (XElement element in doc.Descendants("Serialization"))
{
list.Add(new Serialization()
{
ID = element.Element("ID").Value,
APIKEY = element.Element("APIKEY").Value,
VCODE = element.Element("VCODE").Value
});
}
}
}
}
public class Serialization
{
private string id;
private string APIkey;
private string VCode;
public string ID
{
get { return id; }
set { id = value; }
}
public string APIKEY
{
get { return APIkey; }
set { APIkey = value; }
}
public string VCODE
{
get { return VCode; }
set { VCode = value; }
}
public static void SaveData(List<Serialization> list, string Filename)
{
File.Delete(Filename);
XmlSerializer sr = new XmlSerializer(list.GetType());
TextWriter writer = new StreamWriter(Filename, true);
sr.Serialize(writer, list);
writer.Close();
}
}
private void textBox1\u TextChanged(对象发送者,事件参数e)
{
if(string.IsNullOrEmpty(txtAPI.Text)| string.IsNullOrEmpty(txtVerC.Text))
{
BTAPIConfirm.Visible=false;
}
其他的
{
BTAPIConfirm.Visible=true;
}
}
公共无效按钮1\u单击(对象发送者,事件参数e)
{
if(string.IsNullOrEmpty(txtAPI.Text))
{
Show(“没有要输入的内容”,“重试”,MessageBoxButtons.OK,MessageBoxIcon.惊叹号);
返回;
}
其他的
{
序列化信息=新序列化();
info.APIKEY=txtAPI.Text;
info.VCODE=txtVerC.Text;
info.ID=Guid.NewGuid().ToString();
列表。添加(信息);
SaveData(列表,“data.XML”);
}
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
这个。关闭();
}
私有void whatIsThisToolStripMenuItem\u单击(对象发送方,事件参数e)
{
}
//乌卡平端部
公共列表=空;
私有无效UCAPIn_加载(对象发送方,事件参数e)
{
列表=新列表();
如果(File.Exists(“data.XML”))
{
var doc=XDocument.Load(“data.XML”);
foreach(文档子体中的XElement元素(“序列化”))
{
添加(新序列化()
{
ID=元素。元素(“ID”)。值,
APIKEY=element.element(“APIKEY”).Value,
VCODE=element.element(“VCODE”).Value
});
}
}
}
}
公共类序列化
{
私有字符串id;
私钥;
私有字符串VCode;
公共字符串ID
{
获取{return id;}
设置{id=value;}
}
公共字符串密钥
{
获取{return APIkey;}
设置{APIkey=value;}
}
公共字符串VCODE
{
获取{return VCode;}
设置{VCode=value;}
}
公共静态void SaveData(列表,字符串文件名)
{
删除(文件名);
XmlSerializer sr=新的XmlSerializer(list.GetType());
TextWriter writer=新的StreamWriter(文件名,true);
高级序列化(编写者、列表);
writer.Close();
}
}
这里我要做的是在保存XML之前检查它是否存在重复项
有人能给我指出正确的方向吗?我在谷歌上搜索了一点点,但找不到任何关于我想做什么的好参考资料
我的XML输出的副本
<ArrayOfSerialization>
<Serialization>
<ID>52a5900c-bdb8-4c63-93fc-10aff31b226f</ID>
<APIKEY>123</APIKEY>
<VCODE>123</VCODE>
</Serialization>
<Serialization>
<ID>52c85576-97ce-491b-8cdc-b213bb487d15</ID>
<APIKEY>123</APIKEY>
<VCODE>123</VCODE>
</Serialization>
</ArrayOfSerialization>
52a5900c-bdb8-4c63-93fc-10aff31b226f
123
123
52c85576-97ce-491b-8cdc-b213bb487d15
123
123
要比较两个XML,首先应该定义什么定义了相等。元素或属性的顺序重要吗
然后,将XML转换为字符串,因为比较两个字符串很容易
您可以编写一个简单的方法来删除包含XML的字符串中的所有空白
对于示例XML:您可以使用XElement
方法搜索这两个
元素,并使用ToString()
转换为字符串
XElement
在中使用System.Xml.Linq代码>。当然,您也可以使用System.Xml
中的xmlement
类,但不知何故,我更喜欢XElement
毕竟,我不知道序列化
类。我会将文本解析为XML对象,并使用XML库,如:
XElement info = new XElement("ArrayOfSerialization",
new XElement("Serialization",
new XElement("ID", new GUID()),
new XElement("APIKEY", textAPI.Text),
new XElement("VCODE", textVerC.Text)))
添加了一小段MyXML作为示例。