• XML2DT DT2XML


    NoiseScene.xml:

    View Code
     1 <pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
    2 <DataTable>
    3 <Rows>
    4 <Scene>默认</Scene>
    5 <Noise>-100</Noise>
    6 </Rows>
    7 <Rows>
    8 <Scene>高层</Scene>
    9 <Noise>-80</Noise>
    10 </Rows>
    11 </DataTable>

    *.cs:

    View Code
      1         private string xml_NoiseScene = AppDomain.CurrentDomain.BaseDirectory + "NoiseScene.xml";
    2 /// <summary>
    3 /// 加载噪声场景
    4 /// </summary>
    5 /// <returns></returns>
    6 public DataTable LoadNoise()
    7 {
    8 if (!File.Exists(xml_NoiseScene)) return null;
    9 XmlDocument docXml = new XmlDocument();
    10 docXml.Load(xml_NoiseScene);
    11 return GetDataTable(docXml.InnerXml);
    12 }
    13 /// <summary>
    14 /// 保存噪声场景
    15 /// </summary>
    16 /// <returns></returns>
    17 public void SaveNoise(DataTable dt)
    18 {
    19 if (!File.Exists(xml_NoiseScene)) return;
    20 File.SetAttributes(xml_NoiseScene, FileAttributes.Normal); //修改文件只读为可写
    21 XmlDocument docXml = new XmlDocument();
    22 docXml.InnerXml = GetXml(dt);
    23 docXml.Save(xml_NoiseScene);
    24 }
    25 /// <summary>
    26 /// XML2DT
    27 /// </summary>
    28 /// <param name="xmlStr"></param>
    29 /// <returns></returns>
    30 private DataTable GetDataTable(string xmlStr)
    31 {
    32 XmlDocument doc = new XmlDocument();
    33 doc.LoadXml(xmlStr);
    34 XmlNodeList xlist = doc.SelectNodes("//DataTable/Rows");
    35 DataTable Dt = new DataTable();
    36 DataRow Dr;
    37 for (int i = 0; i < xlist.Count; i++)
    38 {
    39 Dr = Dt.NewRow();
    40 XmlElement xe = (XmlElement)xlist.Item(i);
    41 for (int j = 0; j < xe.Attributes.Count; j++)
    42 {
    43 if (!Dt.Columns.Contains("@" + xe.Attributes[j].Name))
    44 Dt.Columns.Add("@" + xe.Attributes[j].Name);
    45 Dr["@" + xe.Attributes[j].Name] = xe.Attributes[j].Value;
    46 }
    47 for (int j = 0; j < xe.ChildNodes.Count; j++)
    48 {
    49 if (!Dt.Columns.Contains(xe.ChildNodes.Item(j).Name))
    50 Dt.Columns.Add(xe.ChildNodes.Item(j).Name);
    51 Dr[xe.ChildNodes.Item(j).Name] = xe.ChildNodes.Item(j).InnerText;
    52 }
    53 Dt.Rows.Add(Dr);
    54 }
    55 return Dt;
    56 }
    57 /// <summary>
    58 /// DT2XML
    59 /// </summary>
    60 /// <param name="dt"></param>
    61 /// <returns></returns>
    62 private string GetXml(DataTable dt)
    63 {
    64 string strXml = @"<?xml version='1.0' encoding='utf-8'?><DataTable />";
    65 XmlDocument doc = new XmlDocument();
    66 doc.LoadXml(strXml);
    67 XmlNode root = doc.SelectSingleNode("//DataTable");
    68 // 创建子节点
    69 for (int j = 0; j < dt.Rows.Count; j++)
    70 {
    71 XmlElement xe = doc.CreateElement("Rows");
    72 XmlElement xeChild = null;
    73 if (!Object.Equals(dt, null))
    74 {
    75 for (int i = 0; i < dt.Columns.Count; i++)
    76 {
    77 if (dt.Columns[i].ColumnName.StartsWith("@"))
    78 {
    79 string AttributeName = dt.Columns[i].ColumnName.Replace("@", "");
    80 // 为该子节点设置属性
    81 xe.SetAttribute(AttributeName, dt.Rows[j][i].ToString());
    82 }
    83 else
    84 {
    85 xeChild = doc.CreateElement(dt.Columns[i].ColumnName);
    86 try
    87 {
    88 xeChild.InnerXml = dt.Rows[j][i].ToString();
    89 }
    90 catch
    91 {
    92 xeChild.InnerText = dt.Rows[j][i].ToString();
    93 }
    94 xe.AppendChild(xeChild);
    95 }
    96 }
    97 }
    98 // 保存子节点设置
    99 root.AppendChild(xe);
    100 }
    101 return doc.InnerXml.ToString();
    102 }




  • 相关阅读:
    行为型模式之Template Method模式
    【翻译】无需安装Python,就可以在.NET里调用Python库
    SciSharpCube:容器中的SciSharp,.NET机器学习开箱即用
    [翻译] NumSharp的数组切片功能 [:]
    C#
    API做翻页的两种思路
    C#相等性
    C#相等性
    SpringBoot进阶教程(五十八)整合Redis之Sentinel哨兵模式
    org.springframework.cache.interceptor.SimpleKey cannot be cast to java.lang.String
  • 原文地址:https://www.cnblogs.com/wanghafan/p/2344149.html
Copyright © 2020-2023  润新知