diff options
Diffstat (limited to 'docs/samples')
26 files changed, 201 insertions, 198 deletions
diff --git a/docs/samples/custom_memory_management.cpp b/docs/samples/custom_memory_management.cpp index f11d27e..2cb5520 100644 --- a/docs/samples/custom_memory_management.cpp +++ b/docs/samples/custom_memory_management.cpp @@ -2,7 +2,7 @@ #include <new> -//[code_custom_memory_management_decl +// tag::decl[] void* custom_allocate(size_t size) { return new (std::nothrow) char[size]; @@ -12,13 +12,13 @@ void custom_deallocate(void* ptr) { delete[] static_cast<char*>(ptr); } -//] +// end::decl[] int main() { -//[code_custom_memory_management_call +// tag::call[] pugi::set_memory_management_functions(custom_allocate, custom_deallocate); -//] +// end::call[] pugi::xml_document doc; doc.load_string("<node/>"); diff --git a/docs/samples/include.cpp b/docs/samples/include.cpp index fa615a4..39830c5 100644 --- a/docs/samples/include.cpp +++ b/docs/samples/include.cpp @@ -3,7 +3,7 @@ #include <string.h> #include <iostream> -//[code_include +// tag::code[] bool load_preprocess(pugi::xml_document& doc, const char* path); bool preprocess(pugi::xml_node node) @@ -51,7 +51,7 @@ bool load_preprocess(pugi::xml_document& doc, const char* path) return result ? preprocess(doc) : false; } -//] +// end::code[] int main() { diff --git a/docs/samples/load_error_handling.cpp b/docs/samples/load_error_handling.cpp index 8dceb99..d1e5a49 100644 --- a/docs/samples/load_error_handling.cpp +++ b/docs/samples/load_error_handling.cpp @@ -4,19 +4,21 @@ void check_xml(const char* source) { -//[code_load_error_handling +// tag::code[] pugi::xml_document doc; pugi::xml_parse_result result = doc.load_string(source); if (result) + { std::cout << "XML [" << source << "] parsed without errors, attr value: [" << doc.child("node").attribute("attr").value() << "]\n\n"; + } else { std::cout << "XML [" << source << "] parsed with errors, attr value: [" << doc.child("node").attribute("attr").value() << "]\n"; std::cout << "Error description: " << result.description() << "\n"; std::cout << "Error offset: " << result.offset << " (error at [..." << (source + result.offset) << "]\n\n"; } -//] +// end::code[] } int main() diff --git a/docs/samples/load_file.cpp b/docs/samples/load_file.cpp index f7b06c9..8b2191b 100644 --- a/docs/samples/load_file.cpp +++ b/docs/samples/load_file.cpp @@ -4,13 +4,13 @@ int main() { -//[code_load_file +// tag::code[] pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file("tree.xml"); std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl; -//] +// end::code[] } // vim:et diff --git a/docs/samples/load_memory.cpp b/docs/samples/load_memory.cpp index 490f7e4..80bba3c 100644 --- a/docs/samples/load_memory.cpp +++ b/docs/samples/load_memory.cpp @@ -5,41 +5,42 @@ int main() { -//[code_load_memory_decl +// tag::decl[] const char source[] = "<mesh name='sphere'><bounds>0 0 1 1</bounds></mesh>"; size_t size = sizeof(source); -//] +// end::decl[] pugi::xml_document doc; { - //[code_load_memory_buffer + // tag::load_buffer[] // You can use load_buffer to load document from immutable memory block: pugi::xml_parse_result result = doc.load_buffer(source, size); - //] + // end::load_buffer[] std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl; } { - //[code_load_memory_buffer_inplace + // tag::load_buffer_inplace_begin[] // You can use load_buffer_inplace to load document from mutable memory block; the block's lifetime must exceed that of document char* buffer = new char[size]; memcpy(buffer, source, size); // The block can be allocated by any method; the block is modified during parsing pugi::xml_parse_result result = doc.load_buffer_inplace(buffer, size); + // end::load_buffer_inplace_begin[] - //<- std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl; - //-> + + // tag::load_buffer_inplace_end[] // You have to destroy the block yourself after the document is no longer used delete[] buffer; - //] + // end::load_buffer_inplace_end[] } { - //[code_load_memory_buffer_inplace_own + // tag::load_buffer_inplace_own[] // You can use load_buffer_inplace_own to load document from mutable memory block and to pass the ownership of this block // The block has to be allocated via pugixml allocation function - using i.e. operator new here is incorrect char* buffer = static_cast<char*>(pugi::get_memory_allocation_function()(size)); @@ -47,16 +48,16 @@ int main() // The block will be deleted by the document pugi::xml_parse_result result = doc.load_buffer_inplace_own(buffer, size); - //] + // end::load_buffer_inplace_own[] std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl; } { - //[code_load_memory_string + // tag::load_string[] // You can use load to load document from null-terminated strings, for example literals: pugi::xml_parse_result result = doc.load_string("<mesh name='sphere'><bounds>0 0 1 1</bounds></mesh>"); - //] + // end::load_string[] std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl; } diff --git a/docs/samples/load_options.cpp b/docs/samples/load_options.cpp index 2589348..b7b0a6b 100644 --- a/docs/samples/load_options.cpp +++ b/docs/samples/load_options.cpp @@ -6,7 +6,7 @@ int main() { pugi::xml_document doc; -//[code_load_options +// tag::code[] const char* source = "<!--comment--><node><</node>"; // Parsing with default options; note that comment node is not added to the tree, and entity reference < is expanded @@ -24,7 +24,7 @@ int main() // Parsing with minimal option mask; comment node is not added to the tree, and < is not expanded doc.load_string(source, pugi::parse_minimal); std::cout << "First node value: [" << doc.first_child().value() << "], node child value: [" << doc.child_value("node") << "]\n"; -//] +// end::code[] } // vim:et diff --git a/docs/samples/load_stream.cpp b/docs/samples/load_stream.cpp index 05cfb7f..f982a83 100644 --- a/docs/samples/load_stream.cpp +++ b/docs/samples/load_stream.cpp @@ -33,10 +33,10 @@ int main() pugi::xml_document doc; { - //[code_load_stream + // tag::code[] std::ifstream stream("weekly-utf-8.xml"); pugi::xml_parse_result result = doc.load(stream); - //] + // end::code[] // first character of root name: U+9031, year: 1997 print_doc("UTF8 file from narrow stream", doc, result); diff --git a/docs/samples/modify_add.cpp b/docs/samples/modify_add.cpp index 04ab445..a2ddd31 100644 --- a/docs/samples/modify_add.cpp +++ b/docs/samples/modify_add.cpp @@ -6,7 +6,7 @@ int main() { pugi::xml_document doc; - //[code_modify_add + // tag::code[] // add node with some name pugi::xml_node node = doc.append_child("node"); @@ -21,7 +21,7 @@ int main() param.append_attribute("name") = "version"; param.append_attribute("value") = 1.1; param.insert_attribute_after("type", param.attribute("name")) = "float"; - //] + // end::code[] doc.print(std::cout); } diff --git a/docs/samples/modify_base.cpp b/docs/samples/modify_base.cpp index bd63708..7c4819b 100644 --- a/docs/samples/modify_base.cpp +++ b/docs/samples/modify_base.cpp @@ -8,7 +8,7 @@ int main() pugi::xml_document doc; if (!doc.load_string("<node id='123'>text</node><!-- comment -->", pugi::parse_default | pugi::parse_comments)) return -1; - //[code_modify_base_node + // tag::node[] pugi::xml_node node = doc.child("node"); // change node name @@ -21,9 +21,9 @@ int main() // we can't change value of the element or name of the comment std::cout << node.set_value("1") << ", " << doc.last_child().set_name("2") << std::endl; - //] + // end::node[] - //[code_modify_base_attr + // tag::attr[] pugi::xml_attribute attr = node.attribute("id"); // change attribute name/value @@ -37,7 +37,7 @@ int main() // we can also use assignment operators for more concise code attr = true; std::cout << "final attribute value: " << attr.value() << std::endl; - //] + // end::attr[] } // vim:et diff --git a/docs/samples/modify_remove.cpp b/docs/samples/modify_remove.cpp index 53020e1..d54c0d8 100644 --- a/docs/samples/modify_remove.cpp +++ b/docs/samples/modify_remove.cpp @@ -7,7 +7,7 @@ int main() pugi::xml_document doc; if (!doc.load_string("<node><description>Simple node</description><param name='id' value='123'/></node>")) return -1; - //[code_modify_remove + // tag::code[] // remove description node with the whole subtree pugi::xml_node node = doc.child("node"); node.remove_child("description"); @@ -19,7 +19,7 @@ int main() // we can also remove nodes/attributes by handles pugi::xml_attribute id = param.attribute("name"); param.remove_attribute(id); - //] + // end::code[] doc.print(std::cout); } diff --git a/docs/samples/save_custom_writer.cpp b/docs/samples/save_custom_writer.cpp index fe08b72..e777a32 100644 --- a/docs/samples/save_custom_writer.cpp +++ b/docs/samples/save_custom_writer.cpp @@ -4,7 +4,7 @@ #include <iostream> #include <cstring> -//[code_save_custom_writer +// tag::code[] struct xml_string_writer: pugi::xml_writer { std::string result; @@ -14,7 +14,7 @@ struct xml_string_writer: pugi::xml_writer result.append(static_cast<const char*>(data), size); } }; -//] +// end::code[] struct xml_memory_writer: pugi::xml_writer { diff --git a/docs/samples/save_declaration.cpp b/docs/samples/save_declaration.cpp index a45831f..7ca1e07 100644 --- a/docs/samples/save_declaration.cpp +++ b/docs/samples/save_declaration.cpp @@ -1,27 +1,27 @@ -#include "pugixml.hpp"
-
-#include <iostream>
-
-int main()
-{
- //[code_save_declaration
- // get a test document
- pugi::xml_document doc;
- doc.load_string("<foo bar='baz'><call>hey</call></foo>");
-
- // add a custom declaration node
- pugi::xml_node decl = doc.prepend_child(pugi::node_declaration);
- decl.append_attribute("version") = "1.0";
- decl.append_attribute("encoding") = "UTF-8";
- decl.append_attribute("standalone") = "no";
-
- // <?xml version="1.0" encoding="UTF-8" standalone="no"?>
- // <foo bar="baz">
- // <call>hey</call>
- // </foo>
- doc.save(std::cout);
- std::cout << std::endl;
- //]
-}
-
-// vim:et
+#include "pugixml.hpp" + +#include <iostream> + +int main() +{ + // tag::code[] + // get a test document + pugi::xml_document doc; + doc.load_string("<foo bar='baz'><call>hey</call></foo>"); + + // add a custom declaration node + pugi::xml_node decl = doc.prepend_child(pugi::node_declaration); + decl.append_attribute("version") = "1.0"; + decl.append_attribute("encoding") = "UTF-8"; + decl.append_attribute("standalone") = "no"; + + // <?xml version="1.0" encoding="UTF-8" standalone="no"?> + // <foo bar="baz"> + // <call>hey</call> + // </foo> + doc.save(std::cout); + std::cout << std::endl; + // end::code[] +} + +// vim:et diff --git a/docs/samples/save_file.cpp b/docs/samples/save_file.cpp index 21413a2..10c6104 100644 --- a/docs/samples/save_file.cpp +++ b/docs/samples/save_file.cpp @@ -8,10 +8,10 @@ int main() pugi::xml_document doc; doc.load_string("<foo bar='baz'>hey</foo>"); - //[code_save_file + // tag::code[] // save document to file std::cout << "Saving result: " << doc.save_file("save_file_output.xml") << std::endl; - //] + // end::code[] } // vim:et diff --git a/docs/samples/save_options.cpp b/docs/samples/save_options.cpp index 82abdcd..e196946 100644 --- a/docs/samples/save_options.cpp +++ b/docs/samples/save_options.cpp @@ -4,7 +4,7 @@ int main() { - //[code_save_options + // tag::code[] // get a test document pugi::xml_document doc; doc.load_string("<foo bar='baz'><call>hey</call></foo>"); @@ -42,7 +42,7 @@ int main() // <foo bar="baz"><call>hey</call></foo> doc.save(std::cout, "\t", pugi::format_raw | pugi::format_no_declaration); std::cout << std::endl; - //] + // end::code[] } // vim:et diff --git a/docs/samples/save_stream.cpp b/docs/samples/save_stream.cpp index eba1863..84a33bf 100644 --- a/docs/samples/save_stream.cpp +++ b/docs/samples/save_stream.cpp @@ -8,11 +8,11 @@ int main() pugi::xml_document doc; doc.load_string("<foo bar='baz'><call>hey</call></foo>"); - //[code_save_stream + // tag::code[] // save document to standard output std::cout << "Document:\n"; doc.save(std::cout); - //] + // end::code[] } // vim:et diff --git a/docs/samples/save_subtree.cpp b/docs/samples/save_subtree.cpp index a94e10a..5ae4830 100644 --- a/docs/samples/save_subtree.cpp +++ b/docs/samples/save_subtree.cpp @@ -4,7 +4,7 @@ int main() { - //[code_save_subtree + // tag::code[] // get a test document pugi::xml_document doc; doc.load_string("<foo bar='baz'><call>hey</call></foo>"); @@ -20,7 +20,7 @@ int main() // print a subtree to standard output (prints <call>hey</call>) doc.child("foo").child("call").print(std::cout, "", pugi::format_raw); std::cout << std::endl; - //] + // end::code[] } // vim:et diff --git a/docs/samples/text.cpp b/docs/samples/text.cpp index a0d591b..0b4bae6 100644 --- a/docs/samples/text.cpp +++ b/docs/samples/text.cpp @@ -1,35 +1,35 @@ -#include "pugixml.hpp"
-
-#include <iostream>
-
-int main()
-{
- pugi::xml_document doc;
-
- // get a test document
- doc.load_string("<project><name>test</name><version>1.1</version><public>yes</public></project>");
-
- pugi::xml_node project = doc.child("project");
-
- //[code_text_access
- std::cout << "Project name: " << project.child("name").text().get() << std::endl;
- std::cout << "Project version: " << project.child("version").text().as_double() << std::endl;
- std::cout << "Project visibility: " << (project.child("public").text().as_bool(/* def= */ true) ? "public" : "private") << std::endl;
- std::cout << "Project description: " << project.child("description").text().get() << std::endl;
- //]
-
- std::cout << std::endl;
-
- //[code_text_modify
- // change project version
- project.child("version").text() = 1.2;
-
- // add description element and set the contents
- // note that we do not have to explicitly add the node_pcdata child
- project.append_child("description").text().set("a test project");
- //]
-
- doc.save(std::cout);
-}
-
-// vim:et
+#include "pugixml.hpp" + +#include <iostream> + +int main() +{ + pugi::xml_document doc; + + // get a test document + doc.load_string("<project><name>test</name><version>1.1</version><public>yes</public></project>"); + + pugi::xml_node project = doc.child("project"); + + // tag::access[] + std::cout << "Project name: " << project.child("name").text().get() << std::endl; + std::cout << "Project version: " << project.child("version").text().as_double() << std::endl; + std::cout << "Project visibility: " << (project.child("public").text().as_bool(/* def= */ true) ? "public" : "private") << std::endl; + std::cout << "Project description: " << project.child("description").text().get() << std::endl; + // end::access[] + + std::cout << std::endl; + + // tag::modify[] + // change project version + project.child("version").text() = 1.2; + + // add description element and set the contents + // note that we do not have to explicitly add the node_pcdata child + project.append_child("description").text().set("a test project"); + // end::modify[] + + doc.save(std::cout); +} + +// vim:et diff --git a/docs/samples/traverse_base.cpp b/docs/samples/traverse_base.cpp index d59c8b0..3ee7fe4 100644 --- a/docs/samples/traverse_base.cpp +++ b/docs/samples/traverse_base.cpp @@ -10,7 +10,7 @@ int main() pugi::xml_node tools = doc.child("Profile").child("Tools"); - //[code_traverse_base_basic + // tag::basic[] for (pugi::xml_node tool = tools.first_child(); tool; tool = tool.next_sibling()) { std::cout << "Tool:"; @@ -22,11 +22,11 @@ int main() std::cout << std::endl; } - //] + // end::basic[] std::cout << std::endl; - //[code_traverse_base_data + // tag::data[] for (pugi::xml_node tool = tools.child("Tool"); tool; tool = tool.next_sibling("Tool")) { std::cout << "Tool " << tool.attribute("Filename").value(); @@ -34,18 +34,18 @@ int main() std::cout << ", Timeout " << tool.attribute("Timeout").as_int(); std::cout << ", Description '" << tool.child_value("Description") << "'\n"; } - //] + // end::data[] std::cout << std::endl; - //[code_traverse_base_contents + // tag::contents[] std::cout << "Tool for *.dae generation: " << tools.find_child_by_attribute("Tool", "OutputFileMasks", "*.dae").attribute("Filename").value() << "\n"; for (pugi::xml_node tool = tools.child("Tool"); tool; tool = tool.next_sibling("Tool")) { std::cout << "Tool " << tool.attribute("Filename").value() << "\n"; } - //] + // end::contents[] } // vim:et diff --git a/docs/samples/traverse_iter.cpp b/docs/samples/traverse_iter.cpp index 90e0dc6..77bcf35 100644 --- a/docs/samples/traverse_iter.cpp +++ b/docs/samples/traverse_iter.cpp @@ -9,7 +9,7 @@ int main() pugi::xml_node tools = doc.child("Profile").child("Tools"); - //[code_traverse_iter + // tag::code[] for (pugi::xml_node_iterator it = tools.begin(); it != tools.end(); ++it) { std::cout << "Tool:"; @@ -21,7 +21,7 @@ int main() std::cout << std::endl; } - //] + // end::code[] } // vim:et diff --git a/docs/samples/traverse_predicate.cpp b/docs/samples/traverse_predicate.cpp index 9d8ded0..40e1718 100644 --- a/docs/samples/traverse_predicate.cpp +++ b/docs/samples/traverse_predicate.cpp @@ -3,7 +3,7 @@ #include <string.h> #include <iostream> -//[code_traverse_predicate_decl +// tag::decl[] bool small_timeout(pugi::xml_node node) { return node.attribute("Timeout").as_int() < 20; @@ -21,7 +21,7 @@ struct allow_remote_predicate return node.attribute("AllowRemote").as_bool(); } }; -//] +// end::decl[] int main() { @@ -30,7 +30,7 @@ int main() pugi::xml_node tools = doc.child("Profile").child("Tools"); - //[code_traverse_predicate_find + // tag::find[] // Find child via predicate (looks for direct children only) std::cout << tools.find_child(allow_remote_predicate()).attribute("Filename").value() << std::endl; @@ -42,7 +42,7 @@ int main() // We can use simple functions instead of function objects std::cout << tools.find_child(small_timeout).attribute("Filename").value() << std::endl; - //] + // end::find[] } // vim:et diff --git a/docs/samples/traverse_rangefor.cpp b/docs/samples/traverse_rangefor.cpp index 1f7212e..8d9d7d5 100644 --- a/docs/samples/traverse_rangefor.cpp +++ b/docs/samples/traverse_rangefor.cpp @@ -1,32 +1,32 @@ -#include "pugixml.hpp"
-
-#include <iostream>
-
-int main()
-{
- pugi::xml_document doc;
- if (!doc.load_file("xgconsole.xml")) return -1;
-
- pugi::xml_node tools = doc.child("Profile").child("Tools");
-
- //[code_traverse_rangefor
- for (pugi::xml_node tool: tools.children("Tool"))
- {
- std::cout << "Tool:";
-
- for (pugi::xml_attribute attr: tool.attributes())
- {
- std::cout << " " << attr.name() << "=" << attr.value();
- }
-
- for (pugi::xml_node child: tool.children())
- {
- std::cout << ", child " << child.name();
- }
-
- std::cout << std::endl;
- }
- //]
-}
-
-// vim:et
+#include "pugixml.hpp" + +#include <iostream> + +int main() +{ + pugi::xml_document doc; + if (!doc.load_file("xgconsole.xml")) return -1; + + pugi::xml_node tools = doc.child("Profile").child("Tools"); + + // tag::code[] + for (pugi::xml_node tool: tools.children("Tool")) + { + std::cout << "Tool:"; + + for (pugi::xml_attribute attr: tool.attributes()) + { + std::cout << " " << attr.name() << "=" << attr.value(); + } + + for (pugi::xml_node child: tool.children()) + { + std::cout << ", child " << child.name(); + } + + std::cout << std::endl; + } + // end::code[] +} + +// vim:et diff --git a/docs/samples/traverse_walker.cpp b/docs/samples/traverse_walker.cpp index cb99902..2f4b11b 100644 --- a/docs/samples/traverse_walker.cpp +++ b/docs/samples/traverse_walker.cpp @@ -7,7 +7,7 @@ const char* node_types[] = "null", "document", "element", "pcdata", "cdata", "comment", "pi", "declaration" }; -//[code_traverse_walker_impl +// tag::impl[] struct simple_walker: pugi::xml_tree_walker { virtual bool for_each(pugi::xml_node& node) @@ -19,17 +19,17 @@ struct simple_walker: pugi::xml_tree_walker return true; // continue traversal } }; -//] +// end::impl[] int main() { pugi::xml_document doc; if (!doc.load_file("tree.xml")) return -1; - //[code_traverse_walker_traverse + // tag::traverse[] simple_walker walker; doc.traverse(walker); - //] + // end::traverse[] } // vim:et diff --git a/docs/samples/xpath_error.cpp b/docs/samples/xpath_error.cpp index 6cb6f4f..b6dc424 100644 --- a/docs/samples/xpath_error.cpp +++ b/docs/samples/xpath_error.cpp @@ -7,7 +7,7 @@ int main() pugi::xml_document doc; if (!doc.load_file("xgconsole.xml")) return -1; -//[code_xpath_error +// tag::code[] // Exception is thrown for incorrect query syntax try { @@ -37,7 +37,7 @@ int main() { std::cout << "Select failed: " << e.what() << std::endl; } -//] +// end::code[] } // vim:et diff --git a/docs/samples/xpath_query.cpp b/docs/samples/xpath_query.cpp index c622a9c..857c04c 100644 --- a/docs/samples/xpath_query.cpp +++ b/docs/samples/xpath_query.cpp @@ -8,7 +8,7 @@ int main() pugi::xml_document doc; if (!doc.load_file("xgconsole.xml")) return -1; -//[code_xpath_query +// tag::code[] // Select nodes via compiled query pugi::xpath_query query_remote_tools("/Profile/Tools/Tool[@AllowRemote='true']"); @@ -30,7 +30,7 @@ int main() if (query_name_valid.evaluate_boolean(tool)) std::cout << s << std::endl; } -//] +// end::code[] } // vim:et diff --git a/docs/samples/xpath_select.cpp b/docs/samples/xpath_select.cpp index 74dad60..f6067a3 100644 --- a/docs/samples/xpath_select.cpp +++ b/docs/samples/xpath_select.cpp @@ -7,7 +7,7 @@ int main() pugi::xml_document doc; if (!doc.load_file("xgconsole.xml")) return -1; -//[code_xpath_select +// tag::code[] pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool[@AllowRemote='true' and @DeriveCaptionFrom='lastparam']"); std::cout << "Tools:\n"; @@ -22,7 +22,7 @@ int main() if (build_tool) std::cout << "Build tool: " << build_tool.node().attribute("Filename").value() << "\n"; -//] +// end::code[] } // vim:et diff --git a/docs/samples/xpath_variables.cpp b/docs/samples/xpath_variables.cpp index 52313bf..5affaef 100644 --- a/docs/samples/xpath_variables.cpp +++ b/docs/samples/xpath_variables.cpp @@ -1,38 +1,38 @@ -#include "pugixml.hpp"
-
-#include <iostream>
-#include <string>
-
-int main()
-{
- pugi::xml_document doc;
- if (!doc.load_file("xgconsole.xml")) return -1;
-
-//[code_xpath_variables
- // Select nodes via compiled query
- pugi::xpath_variable_set vars;
- vars.add("remote", pugi::xpath_type_boolean);
-
- pugi::xpath_query query_remote_tools("/Profile/Tools/Tool[@AllowRemote = string($remote)]", &vars);
-
- vars.set("remote", true);
- pugi::xpath_node_set tools_remote = query_remote_tools.evaluate_node_set(doc);
-
- vars.set("remote", false);
- pugi::xpath_node_set tools_local = query_remote_tools.evaluate_node_set(doc);
-
- std::cout << "Remote tool: ";
- tools_remote[2].node().print(std::cout);
-
- std::cout << "Local tool: ";
- tools_local[0].node().print(std::cout);
-
- // You can pass the context directly to select_nodes/select_node
- pugi::xpath_node_set tools_local_imm = doc.select_nodes("/Profile/Tools/Tool[@AllowRemote = string($remote)]", &vars);
-
- std::cout << "Local tool imm: ";
- tools_local_imm[0].node().print(std::cout);
-//]
-}
-
-// vim:et
+#include "pugixml.hpp" + +#include <iostream> +#include <string> + +int main() +{ + pugi::xml_document doc; + if (!doc.load_file("xgconsole.xml")) return -1; + +// tag::code[] + // Select nodes via compiled query + pugi::xpath_variable_set vars; + vars.add("remote", pugi::xpath_type_boolean); + + pugi::xpath_query query_remote_tools("/Profile/Tools/Tool[@AllowRemote = string($remote)]", &vars); + + vars.set("remote", true); + pugi::xpath_node_set tools_remote = query_remote_tools.evaluate_node_set(doc); + + vars.set("remote", false); + pugi::xpath_node_set tools_local = query_remote_tools.evaluate_node_set(doc); + + std::cout << "Remote tool: "; + tools_remote[2].node().print(std::cout); + + std::cout << "Local tool: "; + tools_local[0].node().print(std::cout); + + // You can pass the context directly to select_nodes/select_node + pugi::xpath_node_set tools_local_imm = doc.select_nodes("/Profile/Tools/Tool[@AllowRemote = string($remote)]", &vars); + + std::cout << "Local tool imm: "; + tools_local_imm[0].node().print(std::cout); +// end::code[] +} + +// vim:et |