【问题标题】:parsing the value in between two XML tags解析两个 XML 标记之间的值
【发布时间】:2010-08-16 13:45:31
【问题描述】:

我知道以前有人问过这个问题,但是我似乎找不到合适的解决方案,所以我将说明问题:

我有一个类似于 XML 文件的字符串。它不是 XML 字符串,但它具有开始和结束标记。所有信息都在一行中,例如:

<user>username</username>random data;some more random data<another tag>data</anothertag>randomdata;<mydata>myinfo</mydata>some more random data....

等等……

我试图只阅读&lt;mydata&gt;&lt;/mydata&gt; 之间的内容。有什么方法可以解析这个吗?

谢谢,感谢代码。

【问题讨论】:

  • 所以输入的字符串不是有效的XML?
  • 是的,我想说的是,为什么不让它成为有效的 XML,然后你的解析器和编码器触手可及。
  • 不,正如我所提到的,它不是 XML 字符串。
  • @Shawn D. 因为我不负责那个字符串。我刚刚得到它,需要解析它。我不能强迫我的客户在不需要时创建有效的 XML 字符串。此外,仅仅为了解析一个标签而引入一个完整的 XML 解析器是一种巨大的矫枉过正。不过谢谢。

标签: c linux parsing tags


【解决方案1】:

我只会使用 strstr():

char * get_value(const char *input)
{
  const char *start, *end;

  if((start = strstr(input, "<mydata>")) != NULL)
  {
    start += strlen("<mydata>");
    if((end = strstr(start, "</mydata>")) != NULL)
    {
      char *out = malloc(end - start + 1);
      if(out != NULL)
      {
        memcpy(out, start, (end - start));
        out[end - start] = '\0';
        return out;
      }
    }
  }
  return NULL;
}

注意以上内容未经测试,直接写入SO编辑框。因此,它几乎可以保证至少包含一个错误。

【讨论】:

  • 谢谢。该代码仅返回字符串的前 12 个字符。我不知道为什么。
  • hmmm... 有时传递到输入的字符串包含回车,即使它是同一个缓冲区(字符串)的一部分。但是我看到这如何影响 strstr() 只返回第一个 12 个字符...
  • 它与 memcpy 有关。我刚刚添加了一个 for 循环并将 start 的每个字符复制到 out 直到 i
  • @Jessica:memcpy() 不受回车影响。
  • @Jessica:你发现了一个错误,memcpy() 的第二个参数不正确。现在已经修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 2023-01-23
  • 2018-02-07
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 2013-07-02
相关资源
最近更新 更多