【问题标题】:C# RegEx remove everyting before syncML xml payload of a lineC# RegEx 删除行的syncML xml有效负载之前的所有内容
【发布时间】:2015-10-09 18:42:51
【问题描述】:

我创建的程序正在解析日志行。日志行还包含请求和响应方式的 SYNCML 数据。

解析器的第一部分工作正常,它解析包含同步 ML 数据的日志行,因此只包含请求和响应日志行。现在我想从该日志行中删除所有内容,只留下 syncML 数据。我不确定我该怎么做。

这是我目前所拥有的。

        Regex request = new Regex(@"request class SyncML");
        Regex response = new Regex(@"response class SyncML");

       string line;
        while ((line = sr.ReadLine()) != null)
             {
                 Match req = request.Match(line);
                 Match res = response.Match(line);

                 if (req.Success)
                 {
                     string v = req.Groups[1].Value;
                     Console.WriteLine(line);
                     Console.WriteLine("\t" + v);
                 }

                 if (res.Success)
                 {
                     string v = res.Groups[1].Value;
                     Console.WriteLine(line);
                     Console.WriteLine("\t" + v);
                 }
             }

所以这一切都有效,但是这些行包含程序中包含的所有其他信息,例如日期时间和许多其他我不关心的东西。我只想要纯 XML .. xml 的每个开头都以

  <?xml 

那么我如何删除

这有意义吗?

日志行看起来像这样:

    2015-10-08T10:15:01.383-0400 <bunch of other crap> request class SyncML: <?xml version="1.0  yadadada until the end.

【问题讨论】:

  • 不要那样做。您应该使用 XML 解析器。
  • 我正在解析的日志行不仅包含 xml,它还有其他信息。然后在日志行的末尾显示 syncML xml 有效负载。这正是我想要的有效载荷。
  • 发布你所拥有的。正则表达式不是在这种情况下使用的工具。
  • 如果我想剥离除我想要的 xml 数据之外的所有数据的一行/字符串,我应该使用哪个工具。

标签: c# regex parsing xml-parsing


【解决方案1】:

看起来比我想象的要容易。

 string s = line.Substring(line.IndexOf("<?xml "));

这将删除 xml 有效负载前面的所有内容,剩下的只是 xml payLoad。

@jdweng 你的权利 Regex 不是工具,SubString 是。

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 2013-12-26
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多