【问题标题】:Convert Comma separated string to XML using C#使用 C# 将逗号分隔的字符串转换为 XML
【发布时间】:2016-03-10 21:40:01
【问题描述】:

我想将字符串转换为 XML。 我有一个如下所示的字符串。它包含编程语言名称。

string lang = "java,php,c#,asp.net,spring,hibernate";

我想将此字符串转换为 XML 形式,如下所示:

<Languages>
  <lang Name="java"/>
  <lang Name="php"/>
  <lang Name="c#"/>
  <lang Name="asp.net"/>
  <lang Name="spring"/>
  <lang Name="hibernate"/>
</Languages>

我想将此 XML 数据存储在一个变量中,以便稍后存储在数据库中。

【问题讨论】:

  • 请出示您尝试过的代码。

标签: c# xml


【解决方案1】:

也可以使用 Linq-to-XML 来完成:

using System.Xml.Linq; // required namespace 

XDocument xmlDoc = new XDocument();
XElement xElm = new XElement("Languages",
                    from l in lang.Split(',')
                    select new XElement("lang", new XAttribute("Name", l)                
                    )
                );
xmlDoc.Add(xElm);

【讨论】:

  • 我喜欢这个解决方案。不知何故忘记了 Linq-to-XML。
  • 嗯,这可能是在 C# 中生成 XML 的更简洁的方法
  • 我同意,除了使用模型和 xml 序列化程序。
【解决方案2】:
string lang = "java,php,c#,asp.net,spring,hibernate";
string[] langs = lang.Split(',');

XmlDocument document = new XmlDocument();
XmlElement root = document.CreateElement("Languages");
document.AppendChild(root);

for (int i = 0; i < langs.Length; i++)
{
    XmlElement langElement = document.CreateElement("lang");
    XmlAttribute nameAttr = document.CreateAttribute("Name");
    nameAttr.Value = langs[i];
    langElement.Attributes.Append(nameAttr);
    root.AppendChild(langElement);
}

document.WriteTo(new XmlTextWriter(Console.Out) {
    Formatting = Formatting.Indented 
});

【讨论】:

    【解决方案3】:

    使用 Linq 和字符串操作函数的简短版本

    var vales = lang.Split(','); //Splits the CSV
    var xmlBody = vales.Select(v => string.Format("<lang Name=\"{0}\"/>",v));
    var xml = string.Join(string.Empty, xmlBody); //Potentially add a new line as a seperator
    xml = string.Format("<Languages>{0}</Languages>", xml);
    

    另一种选择是将您的 csv 转换为实现 ISerialize 的模型,然后使用 xml 序列化程序。那是更多的代码,不一定是坏的。如果您想查看示例,请随时询问,我会发布示例。

    【讨论】:

      【解决方案4】:

      这是有效的,

      class Program
          {
              static void Main(string[] args)
              {
                  string lang = "java,php,c#,asp.net,spring,hibernate";
      
                  StringBuilder sb = new StringBuilder();
                  sb.AppendFormat("<Languages>");
                  foreach (string s in lang.Split(','))
                  {
                      sb.AppendFormat("<lang Name=\"{0}\"/>", s);
                  }
                  sb.AppendFormat("</Languages>");
                  Console.WriteLine(sb.ToString());
                  Console.ReadLine();
              }
          }
      

      【讨论】:

      • 不知道为什么这被否决了。它工作得很好。
      • 我很确定它被否决了,因为使用字符串连接构造 XML 是非常糟糕的做法。
      • 我看不出这个解决方案有什么问题。它解决了这个问题,就像这里的所有其他答案一样。 xml 只是文本,所以如果有人能够手动执行它,那么它没有任何问题。也许更容易出错和危险,但可行。
      • @t3chb0t 我同意你的观点,因为我只关注 KISS(保持简单愚蠢),它像其他人一样提供输出。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      • 2018-08-16
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2021-12-18
      相关资源
      最近更新 更多