使用expat解析xml

时间:2010-02-23 20:36:13

标签: c++

我需要获取包含许多元素的xml文件的属性名称和值。

在类中捕获属性值的最佳方法是什么?

我必须遵循startelement处理程序的代码:

start(void *data, const char *el, const char **attr)
{
  int i;

  // Skip the ParameterList element
  if(strcmp(el, "ParameterList") == 0)
  {
      Depth++;
      return;
  }
  //for (i = 0; i < Depth; i++)
    //printf("  ");

  //printf("%s", el);
  DEMData demData;
  for (i = 0; attr[i]; i += 2)
  {
      if(strcmp(attr[i],"BitFldPos") == 0)
      {
      demData.SetBitFldPos(*attr[i + 1] - '0');
      }
      else if(strcmp(attr[i],"BytFldPos") == 0)
      {
        char* pEnd;
        int tmp = strtol(attr[i + 1],&pEnd,10);
        demData.SetBytFldPos(tmp);
      }
      else if(strcmp(attr[i],"ByteOrder") == 0)
      {
        demData.SetByteOrder(attr[i + 1]);
      }
      else if(strcmp(attr[i],"DesS") == 0)
      {
      demData.SetDesS(attr[i + 1]);
      }
      else if(strcmp(attr[i],"EngUnit") == 0)
      {
        demData.SetEngUnit(attr[i + 1]);
      }
      else if(strcmp(attr[i],"OTag") == 0)
      {
        demData.SetOTag(attr[i + 1]);
      }
      else if(strcmp(attr[i],"ValTyp") == 0)
      {
        demData.SetValType(attr[i + 1]);
      }
      else if(strcmp(attr[i],"idx") == 0)
      {
        char* pEnd;
        int tmp = strtol(attr[i + 1],&pEnd,10);
        demData.SetIndex(tmp);
      }
      //printf(" %s='%s'", attr[i], attr[i + 1]);
  }


  // Insert the data in the vector.
  dems.push_back(demData);

  Depth++;
}

1 个答案:

答案 0 :(得分:0)

我建议使用STL字符串对的STL向量。第一个是属性名称,第二个是值。

std::vector<std::pair<std::string,std::string> >

有些人会建议使用std :: map。