From bdeb57221b93aa1affa0e655e717767dbda0279e Mon Sep 17 00:00:00 2001 From: d-led Date: Wed, 3 Oct 2012 18:02:49 +0200 Subject: [PATCH] xml_node navigation --- Lua/lib/test.lua | 2 +- contrib/pugilua/pugilua_lib.cpp | 66 ++++++++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/Lua/lib/test.lua b/Lua/lib/test.lua index 92a87de..8843737 100644 --- a/Lua/lib/test.lua +++ b/Lua/lib/test.lua @@ -25,7 +25,7 @@ for i=0,n-1 do print(node.valid,attribute.valid) local a=node:first_attribute() while a.valid do - print('\t',a.name,a.value) + print(a.name) a=a:next_attribute() end end \ No newline at end of file diff --git a/contrib/pugilua/pugilua_lib.cpp b/contrib/pugilua/pugilua_lib.cpp index 0ecba71..5c8d5f7 100644 --- a/contrib/pugilua/pugilua_lib.cpp +++ b/contrib/pugilua/pugilua_lib.cpp @@ -81,8 +81,6 @@ namespace pugi { public: bool valid() const; - RefCountedPtr child(char const* name) const; - std::string name() const; std::string value() const; @@ -95,6 +93,25 @@ namespace pugi { RefCountedPtr first_attribute() const; RefCountedPtr last_attribute() const; + RefCountedPtr first_child() const; + RefCountedPtr last_child() const; + + RefCountedPtr parent() const; + RefCountedPtr root() const; + + RefCountedPtr child(char const* name) const; + RefCountedPtr attribute(char const* name) const; + + RefCountedPtr next() const; + RefCountedPtr previous() const; + + RefCountedPtr next_sibling(char const* name) const; + RefCountedPtr previous_sibling(char const* name) const; + + //todo: text() + + + private: pugi::xml_node node; }; @@ -216,6 +233,42 @@ namespace pugi { return RefCountedPtr(new lxml_attribute(node.last_attribute())); } + RefCountedPtr lxml_node::first_child() const { + return RefCountedPtr(new lxml_node(node.first_child())); + } + + RefCountedPtr lxml_node::last_child() const { + return RefCountedPtr(new lxml_node(node.last_child())); + } + + RefCountedPtr lxml_node::parent() const { + return RefCountedPtr(new lxml_node(node.parent())); + } + + RefCountedPtr lxml_node::root() const { + return RefCountedPtr(new lxml_node(node.root())); + } + + RefCountedPtr lxml_node::attribute(char const* name) const { + return RefCountedPtr(new lxml_attribute(node.attribute(name))); + } + + RefCountedPtr lxml_node::next() const { + return RefCountedPtr(new lxml_node(node.next_sibling())); + } + + RefCountedPtr lxml_node::previous() const { + return RefCountedPtr(new lxml_node(node.previous_sibling())); + } + + RefCountedPtr lxml_node::next_sibling(char const* name) const { + return RefCountedPtr(new lxml_node(node.next_sibling(name))); + } + + RefCountedPtr lxml_node::previous_sibling(char const* name) const { + return RefCountedPtr(new lxml_node(node.previous_sibling(name))); + } + /////////////////// RefCountedPtr lxml_document::load_file(char const* path) { return RefCountedPtr(new lxml_parse_result(doc.load_file(path))); @@ -308,6 +361,15 @@ void register_pugilua (lua_State* L) { .addFunction("select_nodes",&lxml_node::select_nodes) .addFunction("first_attribute",&lxml_node::first_attribute) .addFunction("last_attribute",&lxml_node::last_attribute) + .addFunction("first_child",&lxml_node::first_child) + .addFunction("last_child",&lxml_node::last_child) + .addFunction("parent",&lxml_node::parent) + .addFunction("root",&lxml_node::root) + .addFunction("attribute",&lxml_node::attribute) + .addFunction("next",&lxml_node::next) + .addFunction("previous",&lxml_node::previous) + .addFunction("next_sibling",&lxml_node::next_sibling) + .addFunction("previous_sibling",&lxml_node::previous_sibling) .endClass() .beginClass("xml_document")