解析一个真正不是XML文件的XML文件(C#.NET)

时间:2011-04-05 02:45:47

标签: c# .net xml winforms parsing

我有一大堆文件,我的新客户给了我,他告诉我这是XML。我担心他会离开这个,并说他有一点编程知识,并说他希望我使用Linq来处理XML,因为他对此很熟悉。

这是每个文件的样子(注意:用假数据替换真实数据)

<UserSettings>
   ${
      Name: String;
      Age: Int32;
      Gender: String;
   }

   ${
      Name: String;
      Age: Int32;
   }
</UserSettings>

现在,这对我来说太过分了。

我正在尝试解析这些文件(并且有数百个),但我不知道从哪里开始。我认为最好自己解析它,因为我认为这不像XML,CSV或Json(实际上,这些文件看起来更像Json而不是我遇到过的任何其他文件。但是不过,我认为这也不是Json。)

有没有人见过这些东西?你会建议用什么来解析这样的东西?

3 个答案:

答案 0 :(得分:1)

罗伯特哈维说,这看起来像JSON。我会“预处理”文件以使其成为JSON并从那里获取它。基本上,只需运行一堆搜索/替换来使其成为JSON - 就像删除带有一些变量名的$(不确定这是否合法的JSON)并用“”包围变量。

最简单的方法是使用linux中的grep或具有良好搜索/替换功能的windows中的某些程序(如记事本++或textpad)

答案 1 :(得分:0)

是的,我怀疑XML解析器会解析那些。理想情况下,您希望在CDATA标记中包含JSON'esque代码,这样它就是有效的XML,并且可以由Linq-to-XML或其他XML读取器进行解析。是否可以让客户做出改变?

<UserSettings>
    <![CDATA[
    ${
        Name: String;
        Age: Int32;
        Gender: String;
    }

    ${
        Name: String;
        Age: Int32;
    }
    ]]>
</UserSettings>

答案 2 :(得分:0)

这适用于我使用Linq。

string xml = "<UserSettings>   ${      Name: String;      Age: Int32;      Gender: String;   }   ${      Name: String;      Age: Int32;   }</UserSettings>";

        try{
            XElement x = XElement.Parse(xml);
        }
        catch
        {
        }

希望这有帮助。