【问题标题】:Requiring existence of XML elements without schema in TinyXML要求在 TinyXML 中存在没有模式的 XML 元素
【发布时间】:2010-10-13 00:08:24
【问题描述】:

我正在尝试使用 TinyXML 实现一个简短的转换器,它将获取一个 XML 文件(具有固定格式),对其进行解析,并使用元素填充一个 protobuf 对象。问题是,protobuf 定义中的某些元素是可选的,而 TinyXML 没有模式支持。

考虑到必需/可选的差异,什么是稳健地解析元素的简单方法。我应该将所有元素粘贴到std::map 中然后检查吗?

一个示例 XML 将是

<box>
  <id>495</bin_id>
  <region>
    <vertices>
      <x>233</x>
      <y>208</y>
    </vertices>
    <vertices>
      <x>233</x>
      <y>188</y>
    </vertices>
    <vertices>
      <x>253</x>
      <y>188</y>
    </vertices>
    <vertices>
      <x>253</x>
      <y>208</y>
    </vertices>
  </region>
  <type>Pencils</type>
  <color>GREEN</color>
  <deplete_level_thr>0.2</deplete_level_thr>
  <replenish_level_thr>0.8</replenish_level_thr>
<box>

带有对应的proto定义

message ProduceBin {
  required int64 id = 1;            
  required system.messaging.Polygon region = 2; 
  optional string type = 3;     
  optional string color = 4;            
  optional double deplete_level_thr = 6;    
  optional double replenish_level_thr = 7;  
}

【问题讨论】:

    标签: parsing protocol-buffers tinyxml


    【解决方案1】:

    看起来IsInitialized()CheckInitialized() 方法会告诉您是否已设置所有必填字段。

    http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.message.html#Message.IsInitialized

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 2019-07-27
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多