32 for (xml_node n : node.children()) {
33 string node_name = n.name();
34 if (node_name ==
"item") {
35 shared_ptr<Item> i{
new Item()};
36 i->id = n.attribute(
"id").as_llong();
37 i->checked = n.attribute(
"checked").as_bool();
38 i->name = n.child_value();
41 cerr <<
"Unknown node named \"" << node_name <<
"\"\n";
48 for (xml_node n : node.children()) {
49 string node_name = n.name();
50 if (node_name ==
"category") {
51 shared_ptr<Category> c{
new Category()};
52 c->id = n.attribute(
"id").as_llong();
53 c->name = n.child_value(
"category-name");
54 model->add_category(c);
56 auto cat_items = n.child(
"category-items");
57 if (cat_items.type() == node_null) {
58 cerr <<
"No category-items\n";
60 for (xml_node category_item : cat_items.children()) {
61 string ci_name = category_item.name();
62 if (ci_name ==
"category-item") {
63 auto id = category_item.attribute(
"id").as_llong();
64 model->associate_item_with_category(
id, c);
66 cerr <<
"Unexpected node named \"" << ci_name <<
"\"\n";
70 cerr <<
"Unknown node named \"" << node_name <<
"\"\n";
78 xml_parse_result result = doc.load_file(
filename.c_str());
80 xml_node gpx = doc.child(
"kitlist");
81 for (xml_node n : gpx.children()) {
82 string node_name = n.name();
83 if (node_name ==
"items") {
85 }
else if (node_name ==
"categories") {
88 cerr <<
"Unknown node named \"" << node_name <<
"\"\n";
94 model->set_dirty(
false);
95 return std::move(
model);
Represents a Category having a many-to-many relationship to zero or more Item instances.
Represents a Item having a many-to-many relationship to zero or more Category instances.
void parse_categories(const pugi::xml_node &node)
Parses the categories XML node.
std::unique_ptr< Model > model
The Model representing the parsed file.
void parse_items(const pugi::xml_node &node)
Parses the items XML node.
std::unique_ptr< Model > parse()
Parses the XML, building the data Model.
std::string filename
The filename to be parsed.