From 9a0700f1b4b7a9f2385f998778f90360f3598456 Mon Sep 17 00:00:00 2001 From: Myun2 Date: Sat, 25 Sep 2010 22:24:59 +0900 Subject: [PATCH] =?utf8?q?roast=5Fxml/dom2.hpp:=20operator=20/=20(elem=5Fa?= =?utf8?q?ttr=5Fselector)=20=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- roast/include/roast/xml/roast_xml/dom2.hpp | 29 +++++++++++++++++++++++++---- roast/test/lexical_test/parser_test.cpp | 1 + 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/roast/include/roast/xml/roast_xml/dom2.hpp b/roast/include/roast/xml/roast_xml/dom2.hpp index d5086626..1281b978 100644 --- a/roast/include/roast/xml/roast_xml/dom2.hpp +++ b/roast/include/roast/xml/roast_xml/dom2.hpp @@ -21,11 +21,12 @@ namespace roast namespace rxpath { - struct elem_name{ - const char* name; - elem_name(const char* name_in) : name(name_in) {} + struct elem_attr_selector + { + const char* elem_name; + const char* attr_name; + const char* attr_value; }; - typedef struct elem_name el; struct attr_selector { @@ -33,9 +34,24 @@ namespace roast const char* value; }; + struct elem_name{ + const char* name; + elem_name(const char* name_in) : name(name_in) {} + + elem_attr_selector operator [] (const attr_selector& as){ + elem_attr_selector eas; + eas.elem_name = name; + eas.attr_name = as.name; + eas.attr_value = as.value; + return eas; + } + }; + typedef struct elem_name el; + struct attr_name{ const char* name; attr_name(const char* name_in) : name(name_in) {} + attr_selector operator = (const char* value){ attr_selector as; as.name = name; @@ -207,6 +223,11 @@ namespace roast { return get_child_elements(NULL, as.name, as.value); } + + ::std::vector operator / (const rxpath::elem_attr_selector& eas) + { + return get_child_elements(eas.elem_name, eas.attr_name, eas.attr_value); + } }; typedef ::std::vector element_list_t; diff --git a/roast/test/lexical_test/parser_test.cpp b/roast/test/lexical_test/parser_test.cpp index 9b680db7..bee874c0 100644 --- a/roast/test/lexical_test/parser_test.cpp +++ b/roast/test/lexical_test/parser_test.cpp @@ -22,6 +22,7 @@ int main() element *e = pdoc->get_root_element(); printf("%s\n", e->get_attribute("date")->value.to_string().c_str() ); printf("%s\n", (*e / el("version")) [2]->get_attribute("module")->value.to_string().c_str() ); + printf("%s\n", (*e / el("dev")[at("type")="SYSTEM"]) [0]->get_attribute("name")->value.to_string().c_str() ); /* element_list_t el = e->get_child_elements(); -- 2.11.0