C#Tri State TreeView XML序列化 [英] C# Tri State TreeView XML Serialization
问题描述
我的设计是一个Tri State TreeView,我为此创建了一个要序列化的xml文件。我创建了我的xsd schmea,然后我为该模式生成了我的类(workflow.xml - > workflow.xsd - > workflow.cs)
我想要如果选中Tri State的方框,则解析xml值为1或0
我的代码如下:
(WorkflowModulSplitAnalizaSplit()和WorkflowModulCapturaPrelucrareCaptura()是在workflow.cs中生成的类。)
I have im my design a Tri State TreeView for which I create a xml file to serialize. I create my xsd schmea and then i have generated my class for that schema (workflow.xml -> workflow.xsd -> workflow.cs)
I want to parse in xml values "1" or "0" if a box from Tri State is checked or not
My code looks like that:
( WorkflowModulSplitAnalizaSplit() and WorkflowModulCapturaPrelucrareCaptura() are classes generated in workflow.cs )
private void WriteXMLFileUsingValuesFromNodes(string filenamexml)
{
WorkflowModulSplitAnalizaSplit mc_s = new WorkflowModulSplitAnalizaSplit();
if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[0].Nodes[0].Nodes[0]) == TriStateTreeView.CheckState.Checked)
{
mc_s.M0_RevertSnapshot = byte.Parse("1");
}
else
{
mc_s.M0_RevertSnapshot = byte.Parse("0");
}
if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[0].Nodes[0].Nodes[1]) == TriStateTreeView.CheckState.Checked)
{
mc_s.M0_PowerOnVM = byte.Parse("1");
}
else
{
mc_s.M0_PowerOnVM = byte.Parse("0");
}
XmlSerializer xs_s = new XmlSerializer(typeof(WorkflowModulCapturaPrelucrareCaptura));
FileStream fs_s = new FileStream(@"C:\Users\SmartAdm\Documents\visual studio 2012\Projects\Workflow_Robo\Workflow_Robo\workflow.xml", FileMode.Create);
xs_s.Serialize(fs_s, mc_s);
fs_s.Close();
//=============================================================================================
WorkflowModulCapturaPrelucrareCaptura mc = new WorkflowModulCapturaPrelucrareCaptura();
if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[1].Nodes[1].Nodes[12]) == TriStateTreeView.CheckState.Checked)
{
mc.M3_CopyResultonserver = byte.Parse("1");
}
else
{
mc.M3_CopyResultonserver = byte.Parse("0");
}
if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[1].Nodes[1].Nodes[0]) == TriStateTreeView.CheckState.Checked)
{
mc.M3_RevertSnapshot = byte.Parse("1");
}
else
{
mc.M3_RevertSnapshot = byte.Parse("0");
}
XmlSerializer xs = new XmlSerializer(typeof(WorkflowModulCapturaPrelucrareCaptura));
FileStream fs = new FileStream(@"C:\Users\SmartAdm\Desktop\Workflow_Robo\Workflow_Robo\workflow.xml", FileMode.Create);
xs.Serialize(fs, mc);
fs.Close();
}
private void button1_Click(object sender, EventArgs e)
{
saveFileDialog1.ShowDialog();
this.Refresh();
}
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
string name = saveFileDialog1.FileName;
WriteXMLFileUsingValuesFromNodes(name);
}
只从xml写入一个节点,我丢失了其他节点。这是我可以调整代码的方式,因此它将在xml的所有节点中编写。
非常感谢!
推荐答案
如果我运行我的代码实际上,它将从下面的代码中为mc对象写下最后一部分
WorkflowModulCapturaPrelucrareCaptura mc = new WorkflowModulCapturaPrelucrareCaptura();
if(triStateTreeView1.GetChecked(triStateTreeView1.Nodes [0] .Nodes [1] .Nodes [1] .Nodes [12])== TriStateTreeView.CheckState.Checked)
{
mc.M3_CopyResultonserver = byte.Parse(1);
}
else
{
mc.M3_CopyResultonserver = byte.Parse(0);
}
if(triStateTreeView1 .GetChecked(triStateTreeView1.Nodes [0] .Nodes [1] .Nodes [1] .Nodes [0])== TriStateTreeView.CheckState.Checked)
{
mc.M3_RevertSnapshot = byte.Parse(1);
}
else
{
mc.M3_RevertSnapshot = byte.Parse(0);
}
XmlSerializer xs = new XmlSerializer (typeof(WorkflowModulCapturaPrelucrareCaptura));
FileStream fs = new FileStream(@C:\Users\SmartAdm \Desktop\Workflow_Robo\Workflow_Robo\workflow.xml,FileMode.Create );
xs.Serialize(fs,mc);
fs.Close();
如果我评论那部分代码它将写入第一部分,对象为mc_s ...
我的xml文件看起来像这样:
< workflow>
< modulsplit>
< analizasplit>
< m0_revertsnapshot> 1
< m0_poweronvm> 1
< m0_loginguest> 1
< m0_copyresultonserver> 1
< extragerebinare>
< m1_revertsnapshot> 1
< m1_poweronvm> 1
< m1_loginguest> 1
< m1_copyresultonserver> 1
< modulcaptura>
< captura>
< m2_revertsnapshot> 1
< m2_poweronvm> 1
< m2_loginguest> 1
< m2_copyresultonserver> 1
< prelucrarecaptura>
< m3_revertsnapshot> 1
< m3_poweronvm> 1
< m3_loginguest> 1
< m3_copyresultonserver> 1
我想将值0或1解析为xml中的元素:)
If I run my code as it is, it will write the last part, from below code, for mc object
WorkflowModulCapturaPrelucrareCaptura mc = new WorkflowModulCapturaPrelucrareCaptura();
if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[1].Nodes[1].Nodes[12]) == TriStateTreeView.CheckState.Checked)
{
mc.M3_CopyResultonserver = byte.Parse("1");
}
else
{
mc.M3_CopyResultonserver = byte.Parse("0");
}
if (triStateTreeView1.GetChecked(triStateTreeView1.Nodes[0].Nodes[1].Nodes[1].Nodes[0]) == TriStateTreeView.CheckState.Checked)
{
mc.M3_RevertSnapshot = byte.Parse("1");
}
else
{
mc.M3_RevertSnapshot = byte.Parse("0");
}
XmlSerializer xs = new XmlSerializer(typeof(WorkflowModulCapturaPrelucrareCaptura));
FileStream fs = new FileStream(@"C:\Users\SmartAdm\Desktop\Workflow_Robo\Workflow_Robo\workflow.xml", FileMode.Create);
xs.Serialize(fs, mc);
fs.Close();
If I comment that part of code it will be written the first part, for object mc_s...
My xml file looks like that:
<workflow>
<modulsplit>
<analizasplit>
<m0_revertsnapshot>1
<m0_poweronvm>1
<m0_loginguest>1
<m0_copyresultonserver>1
<extragerebinare>
<m1_revertsnapshot>1
<m1_poweronvm>1
<m1_loginguest>1
<m1_copyresultonserver>1
<modulcaptura>
<captura>
<m2_revertsnapshot>1
<m2_poweronvm>1
<m2_loginguest>1
<m2_copyresultonserver>1
<prelucrarecaptura>
<m3_revertsnapshot>1
<m3_poweronvm>1
<m3_loginguest>1
<m3_copyresultonserver>1
I want to parse value "0" or "1" to elements from xml :)
Hi,
[Serializable]
[XmlRoot("RootElement")]
public class RootElement
{
[XmlElement]
public WorkflowModulSplitAnalizaSplit ModulSplitAnalizaSplit { get; set; }
public WorkflowModulCapturaPrelucrareCaptura ModulCapturaPrelucrareCaptura { get; set;}
}
public class WorkflowModulSplitAnalizaSplit
{
[XmlElement]
public byte M0_RevertSnapshot { get; set; }
public byte M0_PowerOnVM { get; set; }
}
public class WorkflowModulCapturaPrelucrareCaptura
{
[XmlElement]
public byte M3_CopyResultonserver { get; set; }
public byte M3_RevertSnapshot { get; set; }
}
public void WriteXMLFileUsingValuesFromNodes()
{
WorkflowModulSplitAnalizaSplit mc_s = new WorkflowModulSplitAnalizaSplit();
mc_s.M0_RevertSnapshot = Convert.ToByte(1);
mc_s.M0_PowerOnVM = Convert.ToByte(0);
XmlSerializer xs_s = new XmlSerializer(typeof(WorkflowModulSplitAnalizaSplit));
string fileName_1 = "xmlTest_1.xml";
using (TextWriter tw = new StreamWriter(fileName_1))
{
xs_s.Serialize(tw, mc_s);
}
//=============================================================================================
WorkflowModulCapturaPrelucrareCaptura mc = new WorkflowModulCapturaPrelucrareCaptura();
mc.M3_CopyResultonserver = Convert.ToByte(1);
mc.M3_RevertSnapshot = Convert.ToByte(0);
XmlSerializer xs = new XmlSerializer(typeof(WorkflowModulCapturaPrelucrareCaptura));
string fileName_2 = "xmlTest_2.xml";
using (TextWriter tw = new StreamWriter(fileName_2))
{
xs.Serialize(tw, mc);
}
//====================================================================================
RootElement root = new RootElement();
root.ModulCapturaPrelucrareCaptura = mc;
root.ModulSplitAnalizaSplit = mc_s;
XmlSerializer xmlRoot = new XmlSerializer(typeof(RootElement));
string fileName_3 = "xmlTest_3.xml";
using (TextWriter tw = new StreamWriter(fileName_3))
{
xmlRoot.Serialize(tw, root);
}
}
档案_1
File _1
<?xml version="1.0" encoding="utf-8"?>
<WorkflowModulSplitAnalizaSplit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<M0_RevertSnapshot>1</M0_RevertSnapshot>
<M0_PowerOnVM>0</M0_PowerOnVM>
</WorkflowModulSplitAnalizaSplit>
File_2
File_2
<?xml version="1.0" encoding="utf-8"?>
<WorkflowModulCapturaPrelucrareCaptura xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<M3_CopyResultonserver>1</M3_CopyResultonserver>
<M3_RevertSnapshot>0</M3_RevertSnapshot>
</WorkflowModulCapturaPrelucrareCaptura>
File_3
File_3
<?xml version="1.0" encoding="utf-8"?>
<RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ModulSplitAnalizaSplit>
<M0_RevertSnapshot>1</M0_RevertSnapshot>
<M0_PowerOnVM>0</M0_PowerOnVM>
</ModulSplitAnalizaSplit>
<ModulCapturaPrelucrareCaptura>
<M3_CopyResultonserver>1</M3_CopyResultonserver>
<M3_RevertSnapshot>0</M3_RevertSnapshot>
</ModulCapturaPrelucrareCaptura>
</RootElement>
他们都按预期写入每个文件。
问候
Jegan
They all write to each files as expected.
Regards
Jegan
这篇关于C#Tri State TreeView XML序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!