10 #ifndef BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_READ_RAPIDXML_HPP_INCLUDED
11 #define BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_READ_RAPIDXML_HPP_INCLUDED
20 namespace boost {
namespace property_tree {
namespace xml_parser
23 template<
class Ptree,
class Ch>
27 using namespace detail::rapidxml;
34 Ptree &pt_node =
pt.push_back(std::make_pair(node->name(),
40 Ptree &pt_attr_root = pt_node.push_back(
41 std::make_pair(xmlattr<typename Ptree::key_type>(), Ptree()))->second;
43 attr; attr = attr->next_attribute())
45 Ptree &pt_attr = pt_attr_root.push_back(
46 std::make_pair(attr->name(), Ptree()))->second;
47 pt_attr.data() =
typename Ptree::key_type(attr->value(), attr->value_size());
53 child; child = child->next_sibling())
63 pt.push_back(std::make_pair(xmltext<typename Ptree::key_type>(),
64 Ptree(node->value())));
66 pt.data() +=
typename Ptree::key_type(node->value(), node->value_size());
74 pt.push_back(std::make_pair(xmlcomment<typename Ptree::key_type>(),
75 Ptree(
typename Ptree::key_type(node->value(), node->value_size()))));
87 typename Ptree::key_type::value_type> &stream,
90 const std::string &filename)
92 typedef typename Ptree::key_type::value_type
Ch;
93 using namespace detail::rapidxml;
96 stream.unsetf(std::ios::skipws);
97 std::vector<Ch> v(std::istreambuf_iterator<Ch>(stream.rdbuf()),
98 std::istreambuf_iterator<Ch>());
113 xml_document<Ch> doc;
116 doc.BOOST_NESTED_TEMPLATE parse<f_tws>(&v.front());
118 doc.BOOST_NESTED_TEMPLATE parse<0>(&v.front());
121 doc.BOOST_NESTED_TEMPLATE parse<f_tws_c>(&v.front());
123 doc.BOOST_NESTED_TEMPLATE parse<f_c>(&v.front());
128 for (xml_node<Ch> *child = doc.first_node();
129 child; child = child->next_sibling())
134 }
catch (parse_error &e) {
135 long line =
static_cast<long>(
136 std::count(&v.front(), e.where<
Ch>(),
Ch(
'\n')) + 1);