0

次のxmlファイルがあります。ベイ1とベイ2の2つのドライブのファームウェアバージョン情報が表示されています。この時点では、ベイ1とベイ2を除いて、すべてが両方のドライブで同じように見えます。ただし、これらのファームウェアバージョンは異なると思います。ベイ1とベイ2のドライブのファームウェアバージョンが同じかどうかを読んで比較できるようにする必要があります。Boost(RedHatおよびC++のバージョン1.41プロパティツリー)を使用しています

<Node>
   <Type>XET</Type>
   <Reference>00110232</Reference>
   <Date>02-09-2012</Date>
</Node>
<Node>
   <Type>XET</Type>
   <Reference>000000</Reference>
   <Date>02-09-2012</Date>
</Node>

私のC++はそれほど素晴らしいものではなく、Boostに関するドキュメントは本当にひどいものです。これまでのところ、xmlファイルを読み取ることはできますが、ファームウェアのバージョンが同じかどうかを検索して確認することはできません。運が悪かったので、いくつかの異なることを試しました。私はこれについていくつかの助けを本当にいただければ幸いです。

  #include <boost/property_tree/ptree.hpp>
  #include <boost/property_tree/xml_parser.hpp>


  using boost::property_tree::ptree;
  ptree pt;

  // reading file.xml
  read_xml(xmlFilePath, pt, boost::property_tree::xml_parser::trim_whitespace );

  string c ;
  try
  {
    c = pt.get<string>("Node.Reference");
  }
  catch(std::exception const& e)
  {
    std::cout << e.what() << std::endl;
  }

  cout << "value is: " << c << endl;

いくつかの問題を解決しました。誰かがすべてのノードを取得する方法を教えてもらえますか?このコードは現在、最初の一致を見つけてそれを出力しますが、それ以外は何もありません。そこにいくつのノードがあるかがわかっていれば、forループを使用できたはずです。イテレータを使用するなど、他の誰かがより良いアイデアを持っていますか?もしそうなら、その方法を教えてください。

4

1 に答える 1

3
...
#include <boost/foreach.hpp>
...

namespace PT = boost::property_tree;


...
    read_xml(xmlFilePath, pt, boost::property_tree::xml_parser::trim_whitespace );

    BOOST_FOREACH(const PT::ptree::value_type& node, pt.get_child("Node"))
    {
        PT::ptree& nodeTree = node.second;
        const std::string type      = nodeTree.get<std::string>("Type");
        const std::string reference = nodeTree.get<std::string>("Reference");
        const std::string date      = nodeTree.get<std::string>("Date");
        ...
    }
...
于 2013-09-13T06:24:53.073 に答える