保存前检查文本是否已在 XML 文件中
Check if text is already in XML file before saving
这是我的保存方法;
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();
}
}
我想在这里做的是在保存之前检查 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>
要比较两个 XML,您应该首先定义什么定义了相等性。元素或属性的顺序重要吗?
然后,将 XML 转换为字符串,因为比较两个字符串很容易。
您可以编写一个简单的方法来从包含 XML.
的字符串中删除所有白色 space
对于您的示例 XML:您可以使用 XElement
方法搜索两个 <Serialization>
元素,并使用 ToString()
转换为字符串。
XElement
在 using System.Xml.Linq;
。当然你也可以在System.Xml
中使用XMLElement
class,但我更喜欢XElement。
毕竟我不知道Serialization
class。我会将文本解析为 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)))
这是我的保存方法;
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();
}
}
我想在这里做的是在保存之前检查 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>
要比较两个 XML,您应该首先定义什么定义了相等性。元素或属性的顺序重要吗?
然后,将 XML 转换为字符串,因为比较两个字符串很容易。
您可以编写一个简单的方法来从包含 XML.
的字符串中删除所有白色 space对于您的示例 XML:您可以使用 XElement
方法搜索两个 <Serialization>
元素,并使用 ToString()
转换为字符串。
XElement
在 using System.Xml.Linq;
。当然你也可以在System.Xml
中使用XMLElement
class,但我更喜欢XElement。
毕竟我不知道Serialization
class。我会将文本解析为 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)))