Giriş
Bu sınıf XML, JSON, INI, INFO dosyalarını okuyabilir. Daha rahat kullanmak için şu satırı kullanırız.
Şöyle yaparız.
Şöyle yaparız.
Kullanmak için şu satırı dahil ederiz.
Şöyle yaparız.
Şöyle yaparız.
Şu nota dikkat etmek gerekir
add metodu
Düğüme özellik ekler. Şöyle yaparız.
Düğüme alt düğüm ekler. Şöyle yaparız.
Bu metod exception atabilir.
Düğümün özelliğine erişmemizi sağlar. Şöyle yaparız.
Düğüme bir özellik atar. Şöyle yaparız.
Bu sınıf XML, JSON, INI, INFO dosyalarını okuyabilir. Daha rahat kullanmak için şu satırı kullanırız.
using boost::property_tree::ptree;
Sınıf key-value çiftleri içerir. Value alanı her zaman metin değerler saklar.
Bu metod şöyle tanımlı.
Şu satırı dahil ederiz.empty_treeThe concept of a Property Tree provides hierarchical storage of data (key-value pairs) where the value is text.
Bu metod şöyle tanımlı.
template<class Ptree>
inline const Ptree &empty_ptree()
{
static Ptree pt;
return pt;
}
Info İçin#include <boost/property_tree/info_parser.hpp>
read_info metoduŞöyle yaparız.
ptree pt;
std::istringstream iss(R"(propset1
{
prop1 2
prop2 5
prop3 60
prop4 7
})");
read_info(iss, pt);
write_info metoduŞöyle yaparız.
write_info(std::cout, pt);
XML İçinKullanmak için şu satırı dahil ederiz.
#include <boost/property_tree/xml_parser.hpp>
read_xml metoduŞöyle yaparız.
boost::property_tree::ptree pt;
boost::property_tree::read_xml(
"./test1.xml", pt);
Şöyle yaparız.read_xml(stream, pt, trim_whitespace | no_comments);
Bu metod exception atar. Şöyle yaparız.try {
stringstream ss;
...
read_xml(ss, xmlTree);
...
}
catch (xml_parser_error &e) {
cout << "Failed to read xml " << e.what() << endl;
}
write_xml metoduŞöyle yaparız.
write_xml(std::cout, pt,
boost::property_tree::xml_writer_make_settings<std::string>(' ', 4, "utf-8"));
JSON İçinŞu nota dikkat etmek gerekir
JSON values are mapped to nodes containing the value. However, all type information is lost; numbers, as well as the literals "null", "true" and "false" are simply mapped to their string form.ptree sınıfı
add metodu
Düğüme özellik ekler. Şöyle yaparız.
ptree childset2;
childset2.add("child2prop1", 2);
add_child metoduDüğüme alt düğüm ekler. Şöyle yaparız.
propset1.add_child("childset2", childset2);
get_child metodu - no default valueBu metod exception atabilir.
try {
auto node = xmlTree.get_child( "example" ));
}
catch (ptree_bad_path) {
...
}
Bir düğüme erişmemizi sağlar. Döndürdüğü nesneboost::property_tree::ptree::value_type
türündendir. XML için Bu type bir pair gibidir. first alanı tag ismini, second alanı ise alt düğümleri belirtir. Şöyle yaparız.auto po = pt.get_child("purchaseOrder");
Şöyle yaparız.auto& propset1 = pt.get_child("propset1");
get_child metodu - with default value
Eğer aradığımız düğüm yoksa boş bir sonuç gelsin istersek şöyle yaparız.const ptree & formats = xmlTree.get_child("article", empty_ptree());
Daha sonra döngü içinde dönebiliriz. Böylece purchaseOrder düğümü altındaki ilk seviye tüm alt düğümleri dolaşabiliriz.BOOST_FOREACH(boost::property_tree::ptree::value_type & node, pt.get_child(...))
{
std::string tagname = node.first;
boost::property_tree::ptree subtree = node.second;
}
Attribute değerlerine şöyle erişiriz.const ptree & formats = xmlTree.get_child("article", empty_ptree());
BOOST_FOREACH(const ptree::value_type & f, formats)
{
const ptree & attributes = f.second.get_child("<xmlattr>", empty_ptree());
//Extracting attributes
BOOST_FOREACH(const ptree::value_type &v, attributes)
{
string first = v.first.data();
//Attribute ismi
if (first == "title")
{
v.second.data();//Attribute değeri }
}
}
get metoduDüğümün özelliğine erişmemizi sağlar. Şöyle yaparız.
po.get("items.item.Price.USPrice", "");
put metoduDüğüme bir özellik atar. Şöyle yaparız.
ptree temp1;
temp1.put("element.<xmlattr>.name","elem1");
temp1.put_child("element.temp", {});
ptree temp2;
temp2.put("element.<xmlattr>.name","elem2");
temp2.put("element.temp", "");
//Add temp1 and temp2 to <main> under <elements>
ptree pt;
pt.add_child("main.elements.element", temp1.get_child("element"));
pt.add_child("main.elements.element", temp2.get_child("element"));
Çıktı olarak şu xml'i alırız.<?xml version="1.0" encoding="utf-8"?>
<main>
<elements>
<element name="elem1">
<temp/>
</element>
<element name="elem2">
<temp/>
</element>
</elements>
</main>
Hiç yorum yok:
Yorum Gönder