【问题标题】:Parsing an XML file that really isn't an XML file (C# .NET)解析真正不是 XML 文件的 XML 文件 (C# .NET)
【发布时间】:2011-07-29 15:11:53
【问题描述】:

我的新客户给了我一大堆文件,他告诉我这是 XML。恐怕他在这方面做得很差,并说他有一点编程知识,并说他希望我使用 Linq to XML,因为他对此很熟悉。

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

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

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

现在,这对我来说太古怪了。

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

有人见过这种东西吗?你会推荐使用什么来解析类似的东西?

【问题讨论】:

  • 谢谢@Robert H - 我会试一试的。我刚刚发现 Json.NET 看起来很酷。
  • 嗯?我看不到罗伯特 H 的评论,怎么会?
  • 啊,好像被删了。
  • 是的,很抱歉。再次阅读您的问题,发现您已经想到了 JSON。

标签: c# .net xml winforms parsing


【解决方案1】:

这适用于我使用 Linq。

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,Mirkules!我在 Windows 上,所以我可以使用 HippoEdit。我用它在不到 2 秒的时间内替换了 180 多个文件。很时髦:)
    【解决方案3】:

    是的,我怀疑 XML 解析器会解析这些。理想情况下,您希望在 CDATA 标记中包含 JSON 式的代码,这样它就是有效的 XML,并且可以被 Linq-to-XML 或其他 XML 阅读器解析。您可以要求客户进行更改吗?

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

    【讨论】:

    • 感谢@Andrey。是的,我去问问他。应该没问题,但与此同时,我计划尽快解析这个东西,这样我就可以睡觉了。我不知道“{”和“}”是有效 XML 的一部分吗?还是我误会了?
    • { 和 } 不是 XML 的一部分 - 通过将整个内容包含在 CDATA 中,您可以告诉 XML 解析器将其视为数据块,而不是尝试将其解析为 XML。因此,您可以使用任何 JSON 库获取这些块、剥离 $ 并解析
    猜你喜欢
    • 2012-01-01
    • 2023-04-07
    • 2011-05-18
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2013-05-29
    相关资源
    最近更新 更多