首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++如何避免上列xml文档

2012-07-29 
求助C++如何处理下列xml文档?xml文档如下:RegionCoordinatesListRegionCoordinatespositionX0/posi

求助C++如何处理下列xml文档?
xml文档如下:

<RegionCoordinatesList>
<RegionCoordinates>
<positionX>0</positionX>
<positionY>0</positionY>
</RegionCoordinates>
<RegionCoordinates>
<positionX>0</positionX>
<positionY>0</positionY>
</RegionCoordinates>
<RegionCoordinates>
<positionX>0</positionX>
<positionY>0</positionY>
</RegionCoordinates>
<RegionCoordinates>
<positionX>0</positionX>
<positionY>0</positionY>
</RegionCoordinates>
</RegionCoordinatesList>

我现在想改变xml文档里面各个字段的值,如改为:

<RegionCoordinatesList>
<RegionCoordinates>
<positionX>0</positionX>
<positionY>0</positionY>
</RegionCoordinates>
<RegionCoordinates>
<positionX>0</positionX>
<positionY>4</positionY>
</RegionCoordinates>
<RegionCoordinates>
<positionX>4</positionX>
<positionY>4</positionY>
</RegionCoordinates>
<RegionCoordinates>
<positionX>4</positionX>
<positionY>0</positionY>
</RegionCoordinates>
</RegionCoordinatesList>

用C++写一个updateValue()函数怎么写啊?如果只是像下面这样的话,我可以搞定:
<RegionCoordinatesList>
<RegionCoordinates>
<positionX>0</positionX>
<positionY>0</positionY>
</RegionCoordinates>
</RegionCoordinatesList>

我的代码如下:
 while(xmlRegionCoordinatesListNode)
 {
  xmlDoc->getNodeNameValue(xmlRegionCoordinatesListNode, &tagName, &tagValue);
   
  if(strcmp(tagName, TAG_RegionCoordinates) == 0)
  {  
  xmlNode_t*xmlRegionCoordinatesNode;
  xmlNode_t*xmlNext2Node;
   
  xmlRegionCoordinatesNode = xmlRegionCoordinatesListNode;
  xmlRegionCoordinatesNode = xmlNext2Node = xmlDoc->getFirstChild(xmlRegionCoordinatesNode, xmlRegionCoordinatesListNode);
   
  while(xmlRegionCoordinatesNode)
  {
  xmlDoc->getNodeNameValue(xmlRegionCoordinatesNode, &tagName, &tagValue);
   
  if(strcmp(tagName, TAG_PositionX) == 0)
  {
  if(! from_string<int>(tagIntValue, std::string(tagValue), std::dec))
  {
  strTemp = "the PositionX tag value must be a integer!";
  m_nLastServiceErr = ERR_XML_CONTENT;
  return internalErr2PSIAStatus(getLastServiceError(), pStatusResponse, strTemp.c_str());
  }
  else
  RegionParams.positionX = tagIntValue; 
  }
   
  else if(strcmp(tagName, TAG_PositionY) == 0)
  {
  if(! from_string<int>(tagIntValue, std::string(tagValue), std::dec))
  {
  strTemp = "the PositionY tag value must be a integer !";
  m_nLastServiceErr = ERR_XML_CONTENT;
  return internalErr2PSIAStatus(getLastServiceError(), pStatusResponse, strTemp.c_str() );
  }
  else
  RegionParams.positionY = tagIntValue; 
  }
  xmlRegionCoordinatesNode = xmlDoc->getNextSibling(xmlRegionCoordinatesNode, xmlNext2Node);


  }
  }
}











[解决办法]
ls 能给我一份你的资料吗?

我以前是用tinyXML

想用微软提供的做一下,呵呵

非mfc , 如果是mfc提供的,那就算了

谢谢了啊
[解决办法]
boost 里面有相关组件可以对xml进行解析,可以看看。
[解决办法]
xerces c++也可以读取与改变的
[解决办法]
曾经用bison做过, 本来还想做个自动工具, 分析DTD,XSD自动生成C代码的, 后来xml用的少了就算了...


[解决办法]
随便找个xml parse库
[解决办法]
各种xml解析库

热点排行