【问题标题】:How to convert text file to XML如何将文本文件转换为 XML
【发布时间】:2016-06-14 11:03:44
【问题描述】:

我有一个 .txt 文件,我想使用 c# 将其转换为 .xml 文件。 txt文件看起来像

a/b/c
a/b
a/b/c/d
e

输出:

<root>
<a>
  <b>
     <c>
       <d></d>
     </c>
   </b>
<a>
<a>
  <b>
     <c></c>
 </b>
</a>
<a>
  <b></b>
</a>
<e>
</root>

你能指导吗?!

【问题讨论】:

  • 你试过什么?订单呢? XML 和源数据的顺序不同。为什么?该顺序是如何得出的?
  • &lt;e&gt; 是无效的 xml - 它应该是 &lt;e /&gt; 或 &lt;e&gt;&lt;/e&gt;
  • 是的,节点e应该是
  • @Optimus,这是一个您就所面临的问题提出问题的网站。请说明您尝试过的内容以及遇到的问题。
  • 我尝试过这样的事情: foreach (String ln in File.ReadAllLines(@"d:\sample.txt")) { string[] fields = ln.Split('/');整数位置 = 0; XElement 记录 = new XElement("node"); foreach(字段中的字符串 sp){ pos += 1; XElement field = new XElement(string.Format(sp, pos.ToString()));字段。添加(sp);记录。添加(字段); } 根。添加(记录); }

标签: c# xml string file


【解决方案1】:

我认为解决这个问题的最简单方法是递归方法

方法:

public static string GetXML(IEnumerable<string> Items)
{
    if (Items.Any())
    {
        return string.Format("<{0}>{1}</{0}>", Items.First(), GetXML(Items.Skip(1)));
    }
    else
    {
        return string.Empty;
    }
}

呼叫:

StringBuilder sbResult = new StringBuilder("<root>");
foreach (string Line in File.ReadAllLines(@"d:\sample.txt"))
{
    sbResult.Append(GetXML(Line.Split('/')));
}
sbResult.Append("</root>");

【讨论】:

    【解决方案2】:

    忽略我在上面的 cmets 中强调的排序问题,这里有一个单列(为了好玩):

    XDocument doc = new XDocument(
        new XElement("root",
                     Regex
                      .Split(input, @"\r?\n")
                      .Select(line => line.Split('/')
                                       .Reverse()
                                       .Aggregate((XElement)null,
                                                  (prev,curr) => 
                                                      new XElement(curr, prev)))));
    

    那么……How can I save the XML contents of an XDocument as an .xml file?

    【讨论】:

      【解决方案3】:

      如果字母后面的下一个字符是斜线,则在当前标签内的斜线后面添加字符。否则关闭当前标签。

      你应该学习数组和索引。

      使用 File.ReadAllLines 方法可以将整个文本文件加载到字符串数组中(一行 = 数组中的一个字符串)。

      【讨论】:

        【解决方案4】:

        我将忽略您的 XML 文件的顺序与您的 txt 文件的顺序不同的事实。 T 为您的文件编写解析器,您必须通过换行符(Environment.NewLine 或“\n”)和“/”拆分您的字符串,然后将字母放在堆栈上并使用所需的封装将它们写入您的一次一个。

        在生成的数组周围放置一个while循环,并将其设置为您使用新行拆分创建的数组的长度。为每一行创建另一个循环以拆分符号并将它们放在堆栈上。

        将符号放入堆栈时,使用“”将其写入文件。把栈中的每一个符号都放好后,只需要弹出它们并将符号写入文件“”

        拆分:C# Split A String By Another String

        也许我会在有时间的时候写一些代码,但这应该会给你一个大致的想法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多