【问题标题】:Reading the string from a txt file and converting it to elements in xml using c#从 txt 文件中读取字符串并使用 c# 将其转换为 xml 中的元素
【发布时间】:2016-04-13 19:17:21
【问题描述】:

我在 txt 文件中有一个像 { {Name Mike} {age 19} {gender male}} 这样的字符串。 我希望将其转换为 xml 作为以下输出。因为我是新手,所以对我来说似乎很怀疑。

<name>Mike</name>
<age>19</age>
<gender>male</male>

任何帮助将不胜感激。

【问题讨论】:

  • 这不是任何常见的标记,尽管它有点接近 json。您必须自己解析它并构建您的 xml 文档。
  • 你可以使用类似“stackoverflow.com/questions/7771500/…”的东西
  • 谢谢。但我希望“名称”成为属性,“迈克”应该是它的值。

标签: c# xml


【解决方案1】:

这是我的解决方案,在我的情况下,首先您必须创建一个 xml 文件,我在 bin 文件夹中创建了 x.xml,并且必须在 xml 文件上创建 root 元素,在我的情况下,示例 xml 在开始如下,root元素名称可以是任何东西,我只使用了root

<root>
</root>

然后编写你的字符串的代码如下

            string s = "{{Name Mike} {age 19} {gender male}}";
            string[] s2 = s.Replace("{", "").Replace("}", "").Split(' ');
            for (int i = 0; i < s2.Length; i++)
            {

                XDocument doc = XDocument.Load("x.xml");
                XElement rt = doc.Element("root");
                XElement elm = rt.Element(s2[i]);

                if (elm != null)
                {
                    elm.SetValue(s2[i + 1]);
                }
                else
                {
                    XElement x = new XElement(s2[i], s2[i + 1]);
                    rt.Add(x);
                }

                doc.Save("x.xml");
                i++;
            }

希望这能解决您的问题

更新

如果您想在不手动创建 xml 文件的情况下自动创建文件,那么您可以这样做

            string s = "{{Name Mike} {age 19} {gender male}}";
            string[] s2 = s.Replace("{", "").Replace("}", "").Split(' ');

            if (!File.Exists("x.xml"))
            {
                TextWriter tw = new StreamWriter("x.xml", true);
                tw.WriteLine("<root>\n</root>");
                tw.Close();
            }

            for (int i = 0; i < s2.Length; i++)
            {

                XDocument doc = XDocument.Load("x.xml");
                XElement rt = doc.Element("root");
                XElement elm = rt.Element(s2[i]);

                if (elm != null)
                {
                    elm.SetValue(s2[i + 1]);
                }
                else
                {
                    XElement x = new XElement(s2[i], s2[i + 1]);
                    rt.Add(x);
                }

                doc.Save("x.xml");
                i++;
            }

【讨论】:

  • 不是手动创建 xml 文件,有没有办法可以自动化,因为这需要创建为安装程序文件。
  • 请查看我的答案更新,如果不存在xml文件将自动创建
  • 实际上我正在这样做 string s = @"E:\Newfolder\sample.txt";但它在 XElement elm = rt.Element(s2[i]); 上遇到异常"':' 字符,十六进制值 0x3A,不能包含在名称中。"
  • 好的,在你的字符串中,在第一个括号之后的 { {Name Mike} {age 19} {gender male}} 开头有一个额外的空格,但我的不是{{Name Mike} {age 19} {gender male}} 问题就在那里,是否可以像我的那样将字符串格式化为一种一致性方式?如果没有,那么你必须忽略它
猜你喜欢
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
相关资源
最近更新 更多