1.在工作中,由于临时需要使用Xml的解析以及导出,则根据网上结合自己情况写了一下。
下面是xml的数据,根据如下xml进行xml的读取以及相应的导出。
<?xml version="1.0" encoding="utf-8"?>
<FluorochromeGroups>
<FluorochromeLibrayGroup Name="All" Description="1" IsDefault="true">
<Fluorochromes>
<FluorochromeLibrayItem Name="3" DisplayName="4" IsDefault="true">
<InstrumentConfigs>
<InstrumentConfig Instrument="A8" Optical="7">
<VirtualFilters>
<VirtualFilter FLChannelID="8" />
<VirtualFilter FLChannelID="9" />
</VirtualFilters>
</InstrumentConfig>
<InstrumentConfig Instrument="A9" Optical="11">
<VirtualFilters>
<VirtualFilter FLChannelID="12" />
<VirtualFilter FLChannelID="13" />
</VirtualFilters>
</InstrumentConfig>
</InstrumentConfigs>
</FluorochromeLibrayItem>
</Fluorochromes>
</FluorochromeLibrayGroup>
</FluorochromeGroups>
接下去进行数据的导入,我这边仅针对我这个xml进行导入
List<FluorochromeLibrayGroup> lstfluo = new List<FluorochromeLibrayGroup>();
FluorochromeLibrayGroup fluorochrome = new FluorochromeLibrayGroup();
FluorochromeLibrayItem fluorochromeLibrayItem = new FluorochromeLibrayItem();
private string _curinstr = "";
/// <summary>
/// 解析FluorochromeLibrayGroup
/// </summary>
/// <param name="ElementArg"></param>
public void GetFluorochromeLibrayGroup(XmlNode ElementArg)
{
foreach (XmlNode xn1 in ElementArg)
{
if (xn1.Name == "FluorochromeLibrayGroup")
{
fluorochrome = new FluorochromeLibrayGroup();
fluorochrome.Name = ((XmlElement)xn1).GetAttribute("Name");
fluorochrome.Description = ((XmlElement)xn1).GetAttribute("Description");
fluorochrome.IsDefault = (((XmlElement)xn1).GetAttribute("IsDefault"));
GetFluorochromeLibrayGroup(xn1);
lstfluo.Add(fluorochrome);
continue;
}
if (xn1.Name == "FluorochromeLibrayItem")
{
fluorochromeLibrayItem = new FluorochromeLibrayItem();
fluorochromeLibrayItem.Name = ((XmlElement)xn1).GetAttribute("Name");
fluorochromeLibrayItem.DisPlayName = ((XmlElement)xn1).GetAttribute("DisplayName");
fluorochromeLibrayItem.IsDefault = (((XmlElement)xn1).GetAttribute("IsDefault"));
GetFluorochromeLibrayItem(xn1);
fluorochrome.FluorochromeLibrayItems.Add(fluorochromeLibrayItem);
}
GetFluorochromeLibrayGroup(xn1);
}
}
/// <summary>
/// 解析FluorochromeLibrayItem
/// </summary>
/// <param name="ElementArg"></param>
public void GetFluorochromeLibrayItem(XmlNode ElementArg)
{
foreach (XmlNode xn1 in ElementArg)
{
if (xn1.Name == "InstrumentConfig")
{
_curinstr = ((XmlElement)xn1).GetAttribute("Instrument");
}
if (xn1.Name == "VirtualFilter")
{
string fl = ((XmlElement)xn1).GetAttribute("FLChannelID");
if (fluorochromeLibrayItem.AllVirtualFilters.ContainsKey(_curinstr))
{
fluorochromeLibrayItem.AllVirtualFilters[_curinstr].Add(fl);
}
else
{
fluorochromeLibrayItem.AllVirtualFilters.Add(_curinstr, new List<string>() { fl });
}
}
GetFluorochromeLibrayItem(xn1);
}
}
//解析xml
public void GetXmlData2()
{
string xmlpath = @"C:\Users\VirtualFilter.xml";
XmlDocument doc = new XmlDocument();
doc.Load(xmlpath);//读取文件
XmlElement root = null;
root = doc.DocumentElement;
XmlElement topList = doc.DocumentElement;//doc.DocumentElement.ChildNodes;
GetFluorochromeLibrayGroup(topList);
}
xml的导出
public void XmlToTable()
{
XmlDocument xmlDoc = new XmlDocument();
//创建类型声明节点
XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
xmlDoc.AppendChild(node);
//创建根节点
XmlNode root = xmlDoc.CreateElement("FluorochromeGroups");
xmlDoc.AppendChild(root);
for (int i = 0; i < lstfluo.Count; i++)
{
XmlNode node1 = xmlDoc.CreateNode(XmlNodeType.Element, "FluorochromeLibrayGroup", null);
((XmlElement)node1).SetAttribute("Name", lstfluo[i].Name);
((XmlElement)node1).SetAttribute("Description", lstfluo[i].Description);
((XmlElement)node1).SetAttribute("IsDefault", lstfluo[i].IsDefault);
XmlNode node2 = xmlDoc.CreateNode(XmlNodeType.Element, "Fluorochromes", null);
for (int j = 0; j < lstfluo[i].FluorochromeLibrayItems.Count; j++)
{
XmlNode node3 = xmlDoc.CreateNode(XmlNodeType.Element, "FluorochromeLibrayItem", null);
((XmlElement)node3).SetAttribute("Name", lstfluo[i].FluorochromeLibrayItems[j].Name);
((XmlElement)node3).SetAttribute("DisplayName", lstfluo[i].FluorochromeLibrayItems[j].DisPlayName);
((XmlElement)node3).SetAttribute("IsDefault", lstfluo[i].FluorochromeLibrayItems[j].IsDefault);
XmlNode node4 = xmlDoc.CreateNode(XmlNodeType.Element, "InstrumentConfigs", null);
foreach (string strkey in lstfluo[i].FluorochromeLibrayItems[j].AllVirtualFilters.Keys)
{
XmlNode node5 = xmlDoc.CreateNode(XmlNodeType.Element, "InstrumentConfig", null);
((XmlElement)node5).SetAttribute("Instrument", strkey);
((XmlElement)node5).SetAttribute("Optical", strkey);
XmlNode node6 = xmlDoc.CreateNode(XmlNodeType.Element, "VirtualFilters", null);
for (int k = 0; k < lstfluo[i].FluorochromeLibrayItems[j].AllVirtualFilters[strkey].Count; k++)
{
XmlNode node7 = xmlDoc.CreateNode(XmlNodeType.Element, "VirtualFilter", null);
((XmlElement)node7).SetAttribute("FLChannelID", lstfluo[i].FluorochromeLibrayItems[j].AllVirtualFilters[strkey][k]);
node6.AppendChild(node7);
}
node5.AppendChild(node6);
node4.AppendChild(node5);
}
node3.AppendChild(node4);
node2.AppendChild(node3);
}
node1.AppendChild(node2);
root.AppendChild(node1);
}
try
{
string filepath = @"C:\New folder";
//if(File)
SaveXmlToLocalhost(xmlDoc, filepath, "data11");
}
catch (Exception e)
{
//显示错误信息
Console.WriteLine(e.Message);
}
}
private void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value)
{
XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);
node.InnerText = value;
parentNode.AppendChild(node);
}