using System; using System.Collections.Generic; using System.IO; using System.Xml; using DPumpHydr.WinFrmUI.Volute; using DPumpHydr.WinFrmUI.Volute.ViewModel; using HydrEngineCSharp; namespace DPumpHydr.WinFrmUI { public partial class VoluteXmlParasTranHelper { XmlDocument _xmlDoc; public bool Read( string filePath, out DPumpHydr.WinFrmUI.Volute.ViewModel.HdrBaseInfo hdrBaseInfo, out DPumpHydr.WinFrmUI.Volute.ViewModel.GeomBaseInfo geomBaseInfo, out DPumpHydr.WinFrmUI.Volute.ViewModel.SectionBundleInfo sectionBundleInfo, out DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowStyle otuflowType, out DPumpHydr.WinFrmUI.Volute.ViewModel.OtuflowParas outflowParas, out double bodyThickness) { hdrBaseInfo = null; geomBaseInfo = null; sectionBundleInfo = null; otuflowType = eOutflowStyle.未知; outflowParas = null; bodyThickness = 0; _xmlDoc = new System.Xml.XmlDocument(); _xmlDoc.Load(filePath); System.Xml.XmlElement rootNode = _xmlDoc.DocumentElement;//根节点 if (rootNode == null) return false; var nodeVersionInfo = rootNode.SelectSingleNode("VersionInfo"); if (nodeVersionInfo == null) return false; #region hdrBaseInfo XmlNode nodeHdrBaseInfo = rootNode.SelectSingleNode("HdrBaseInfo"); if (nodeHdrBaseInfo != null) { hdrBaseInfo = new HdrBaseInfo(); foreach (XmlNode xmlNode in nodeHdrBaseInfo.ChildNodes) { XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型 if (string.IsNullOrEmpty(xmlElement.InnerText)) continue; if (xmlElement.Name == "ShapeType") { hdrBaseInfo.ShapeType = Convert.ToInt32(xmlElement.InnerText); } if (xmlElement.Name == "Q") { hdrBaseInfo.Q = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "H") { hdrBaseInfo.H = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "n") { hdrBaseInfo.n = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "B2") { hdrBaseInfo.B2 = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "D2") { hdrBaseInfo.D2 = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "IsSXB") { hdrBaseInfo.IsSXB = Convert.ToBoolean(xmlElement.InnerText); } if (xmlElement.Name == "ns") { hdrBaseInfo.ns = Convert.ToDouble(xmlElement.InnerText); } } } #endregion #region geomBaseInfo XmlNode nodeGeomBaseInfo = rootNode.SelectSingleNode("GeomBaseInfo"); if (nodeGeomBaseInfo != null) { geomBaseInfo = new GeomBaseInfo(); foreach (XmlNode xmlNode in nodeGeomBaseInfo.ChildNodes) { XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型 if (string.IsNullOrEmpty(xmlElement.InnerText)) continue; if (xmlElement.Name == "D3") { geomBaseInfo.D3 = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "B3") { geomBaseInfo.B3 = Convert.ToDouble(xmlElement.InnerText); } } } #endregion #region sectionBundleInfo XmlNode nodeSectionInfo = rootNode.SelectSingleNode("SectionInfo"); if (nodeSectionInfo != null) { sectionBundleInfo = new SectionBundleInfo(); sectionBundleInfo.R_out = 1500.0; sectionBundleInfo.BaseWidth = geomBaseInfo.B3; sectionBundleInfo.BaseCircleRadius = geomBaseInfo.D3 / 2; foreach (XmlNode xmlNode in nodeSectionInfo.ChildNodes) { XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型 if (string.IsNullOrEmpty(xmlElement.InnerText)) continue; if (xmlElement.Name == "Item") continue; if (xmlElement.Name == "K3") { if (Convert.ToDouble(xmlElement.InnerText) > 0) sectionBundleInfo.K3 = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "V3") { if (Convert.ToDouble(xmlElement.InnerText) > 0) sectionBundleInfo.V3 = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "ShapeType") { sectionBundleInfo.ShapeType = (eSectionShapeType) Convert.ToInt32(xmlElement.InnerText); } if (xmlElement.Name == "R_out") { if(Convert.ToDouble(xmlElement.InnerText) > 100) sectionBundleInfo.R_out = Convert.ToDouble(xmlElement.InnerText); } } var node_items = nodeSectionInfo.SelectNodes("Item"); foreach (XmlNode node_item in node_items) { int Index = -1; foreach (XmlNode xmlNode in node_item.ChildNodes) { XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型 if (xmlElement.Name == "Index") { Index = Convert.ToInt32(xmlElement.InnerText); break; } } if (Index < 0) continue; foreach (XmlNode xmlNode in node_item.ChildNodes) { XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型 if (string.IsNullOrEmpty(xmlElement.InnerText)) continue; if (xmlElement.Name == "R_Left") { sectionBundleInfo.R_Left[Index] = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "R_Right") { sectionBundleInfo.R_Right[Index] = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "H") { sectionBundleInfo.H[Index] = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "GaMa_Left") { sectionBundleInfo.GaMa_Left[Index] = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "GaMa_Right") { sectionBundleInfo.GaMa_Right[Index] = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "Area") { sectionBundleInfo.Area[Index] = Convert.ToDouble(xmlElement.InnerText); } } } } #endregion #region outflowParas XmlNode nodeOutflowParas = rootNode.SelectSingleNode("OutflowParas"); if (nodeOutflowParas != null) { outflowParas = new OtuflowParas(); foreach (XmlNode xmlNode in nodeOutflowParas.ChildNodes) { XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型 if (string.IsNullOrEmpty(xmlElement.InnerText)) continue; if (xmlElement.Name == "Type") { otuflowType = (eOutflowStyle)Convert.ToInt32(xmlElement.InnerText); } if (xmlElement.Name == "Dia") { outflowParas.Dia = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "Offset") { outflowParas.Offset = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "Heigh") { outflowParas.Heigh = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "Septalradius") { outflowParas.Septalradius = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "H1") { outflowParas.H1 = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "H2") { outflowParas.H2 = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "Tangent_Top_Right") { outflowParas.Tangent_Top_Right = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "Tangent_Btm_Right") { outflowParas.Tangent_Btm_Right = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "Tangent_Top_Left") { outflowParas.Tangent_Top_Left = Convert.ToDouble(xmlElement.InnerText); } if (xmlElement.Name == "Tangent_Btm_Left") { outflowParas.Tangent_Btm_Left = Convert.ToDouble(xmlElement.InnerText); } } } #endregion XmlNode nodeBodyThickness = rootNode.SelectSingleNode("BodyThickness"); if (nodeBodyThickness != null) { foreach (XmlNode xmlNode in nodeBodyThickness.ChildNodes) { XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型 if (string.IsNullOrEmpty(xmlElement.InnerText)) continue; if (xmlElement.Name == "Value") { bodyThickness = Convert.ToDouble(xmlElement.InnerText); } } } return true; } public bool Save( string filePath, DPumpHydr.WinFrmUI.Volute.ViewModel.HdrBaseInfo hdrBaseInfo, DPumpHydr.WinFrmUI.Volute.ViewModel.GeomBaseInfo geomBaseInfo, DPumpHydr.WinFrmUI.Volute.ViewModel.SectionBundleInfo sectionBundleInfo, DPumpHydr.WinFrmUI.Volute.ViewModel.eOutflowStyle outflowType, DPumpHydr.WinFrmUI.Volute.ViewModel.OtuflowParas outflowParas, double bodyThickness) { _xmlDoc = new XmlDocument(); XmlDeclaration xmlDeclaration = _xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null); _xmlDoc.AppendChild(xmlDeclaration); XmlElement rootNode = _xmlDoc.CreateElement("root"); _xmlDoc.AppendChild(rootNode); #region 版本信息 //创建VersionInfo子节点 XmlNode VersionInfoNode = _xmlDoc.CreateElement("VersionInfo"); XmlAttribute VersionInfoNodeAttribute = _xmlDoc.CreateAttribute("Description"); VersionInfoNodeAttribute.Value = "XML_Version"; VersionInfoNode.InnerText = "V1.0"; VersionInfoNode.Attributes.Append(VersionInfoNodeAttribute); rootNode.AppendChild(VersionInfoNode); #endregion #region hdrBaseInfo //创建ProductSetting子节点 if (hdrBaseInfo != null) { var nodeHdrBaseInfo = _xmlDoc.CreateElement("HdrBaseInfo"); rootNode.AppendChild(nodeHdrBaseInfo); nodeHdrBaseInfo.AppendChild(AddParasNode("ShapeType", hdrBaseInfo.ShapeType.ToString(), "形状类型:0 旋转型 1 双蜗壳型 2 环型 3准旋转型")); nodeHdrBaseInfo.AppendChild(AddParasNode("Q", hdrBaseInfo.Q, "流量")); nodeHdrBaseInfo.AppendChild(AddParasNode("H", hdrBaseInfo.H, "扬程")); nodeHdrBaseInfo.AppendChild(AddParasNode("n", hdrBaseInfo.n, "转速")); nodeHdrBaseInfo.AppendChild(AddParasNode("B2", hdrBaseInfo.B2, "叶轮宽度")); nodeHdrBaseInfo.AppendChild(AddParasNode("D2", hdrBaseInfo.D2, "叶轮外径")); nodeHdrBaseInfo.AppendChild(AddParasNode("IsSXB", hdrBaseInfo.IsSXB.ToString(), "是否是双吸泵")); nodeHdrBaseInfo.AppendChild(AddParasNode("ns", hdrBaseInfo.ns, "比转速")); } #endregion #region geomBaseInfo //创建ProductSetting子节点 if (geomBaseInfo != null) { var nodeGeomBaseInfo = _xmlDoc.CreateElement("GeomBaseInfo"); rootNode.AppendChild(nodeGeomBaseInfo); nodeGeomBaseInfo.AppendChild(AddParasNode("D3", geomBaseInfo.D3, "基圆直径")); nodeGeomBaseInfo.AppendChild(AddParasNode("B3", geomBaseInfo.B3, "蜗壳入口宽度")); } #endregion #region sectionBundleInfo //创建ProductSetting子节点 if (sectionBundleInfo != null) { var nodeSectionInfo = _xmlDoc.CreateElement("SectionInfo"); rootNode.AppendChild(nodeSectionInfo); nodeSectionInfo.AppendChild(AddParasNode("K3", sectionBundleInfo.K3, "速度系数")); nodeSectionInfo.AppendChild(AddParasNode("V3", sectionBundleInfo.V3, "平均速度")); nodeSectionInfo.AppendChild(AddParasNode("ShapeType", (int)sectionBundleInfo.ShapeType, "类型")); nodeSectionInfo.AppendChild(AddParasNode("R_out", sectionBundleInfo.R_out , "速度系数")); for (int i = 1; i <= 8; i++) { var nodeItem = _xmlDoc.CreateElement("Item"); nodeSectionInfo.AppendChild(nodeItem); nodeItem.AppendChild(AddParasNode("Index", i, "截面序号")); nodeItem.AppendChild(AddParasNode("R_Left", sectionBundleInfo.R_Left[i], "左侧倒圆角半径")); nodeItem.AppendChild(AddParasNode("R_Right", sectionBundleInfo.R_Right[i], "右侧倒圆角半径")); nodeItem.AppendChild(AddParasNode("H", sectionBundleInfo.H[i], "截面高度")); nodeItem.AppendChild(AddParasNode("GaMa_Left", sectionBundleInfo.GaMa_Left[i], "左侧倾斜角度")); nodeItem.AppendChild(AddParasNode("GaMa_Right", sectionBundleInfo.GaMa_Right[i], "右侧倾斜角度")); nodeItem.AppendChild(AddParasNode("Area", sectionBundleInfo.Area[i], "截面面积")); } } #endregion #region outflowParas //创建ProductSetting子节点 if (outflowParas != null) { var nodeOutflowParas = _xmlDoc.CreateElement("OutflowParas"); rootNode.AppendChild(nodeOutflowParas); nodeOutflowParas.AppendChild(AddParasNode("Type", (int)outflowType, "类型")); nodeOutflowParas.AppendChild(AddParasNode("Dia", outflowParas.Dia, "出口直径")); nodeOutflowParas.AppendChild(AddParasNode("Offset", outflowParas.Offset, "出口位置偏移")); nodeOutflowParas.AppendChild(AddParasNode("Heigh", outflowParas.Heigh, "出口位置高度")); nodeOutflowParas.AppendChild(AddParasNode("Septalradius", outflowParas.Septalradius, "割舌半径")); nodeOutflowParas.AppendChild(AddParasNode("H1", outflowParas.H1, " ")); nodeOutflowParas.AppendChild(AddParasNode("H2", outflowParas.H2, " ")); nodeOutflowParas.AppendChild(AddParasNode("Tangent_Top_Right", outflowParas.Tangent_Top_Right, "切线缩放量")); nodeOutflowParas.AppendChild(AddParasNode("Tangent_Btm_Right", outflowParas.Tangent_Btm_Right, "切线缩放量")); nodeOutflowParas.AppendChild(AddParasNode("Tangent_Top_Left", outflowParas.Tangent_Top_Left, "切线缩放量")); nodeOutflowParas.AppendChild(AddParasNode("Tangent_Btm_Left", outflowParas.Tangent_Btm_Left, "切线缩放量")); } #endregion if (bodyThickness > 0) { var nodeBodyThickness = _xmlDoc.CreateElement("BodyThickness"); rootNode.AppendChild(nodeBodyThickness); nodeBodyThickness.AppendChild(AddParasNode("Value", bodyThickness, "厚度")); } _xmlDoc.Save(filePath); return true; } private XmlNode AddParasNode(string name, string value, string desp) { XmlNode node = _xmlDoc.CreateElement(name); node.InnerText = value; if (!string.IsNullOrEmpty(desp)) { XmlAttribute desAttribute = _xmlDoc.CreateAttribute("Description"); desAttribute.Value = desp; node.Attributes.Append(desAttribute); } return node; } private XmlNode AddParasNode(string name, double value, string desp) { XmlNode node = _xmlDoc.CreateElement(name); node.InnerText = value.ToString(); if (!string.IsNullOrEmpty(desp)) { XmlAttribute desAttribute = _xmlDoc.CreateAttribute("Description"); desAttribute.Value = desp; node.Attributes.Append(desAttribute); } return node; } } }