aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2014-04-29 11:04:19 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2014-04-29 11:04:19 +0200
commit818bedc799073966a4c56fd83ab1df358b9e9c24 (patch)
tree5d69822c65b645e2ec57506c15b9dee0d188991b
parent4e5dc8da6c8ef9ead4fcc6acbbade0cd6bfc61ca (diff)
Add value<T> version, analogous to attribute<T>
-rw-r--r--tests/parser/driver.cxx11
-rw-r--r--xml/parser.hxx1
-rw-r--r--xml/parser.ixx7
3 files changed, 19 insertions, 0 deletions
diff --git a/tests/parser/driver.cxx b/tests/parser/driver.cxx
index b882188..c5d18f0 100644
--- a/tests/parser/driver.cxx
+++ b/tests/parser/driver.cxx
@@ -84,6 +84,17 @@ main ()
// cerr << e.what () << endl;
}
+ // Test value extraction.
+ //
+ {
+ istringstream is ("<root>123</root>");
+ parser p (is, "test");
+ p.next_expect (parser::start_element, "root");
+ p.next_expect (parser::characters);
+ assert (p.value<int> () == 123);
+ p.next_expect (parser::end_element);
+ }
+
// Test attribute maps.
//
{
diff --git a/xml/parser.hxx b/xml/parser.hxx
index f3a2e34..b9b5d4c 100644
--- a/xml/parser.hxx
+++ b/xml/parser.hxx
@@ -208,6 +208,7 @@ namespace xml
const std::string& prefix () const {return pqname_->prefix ();}
const std::string& value () const {return *pvalue_;}
+ template <typename T> T value () const;
unsigned long long line () const {return line_;}
unsigned long long column () const {return column_;}
diff --git a/xml/parser.ixx b/xml/parser.ixx
index adb8751..ac27b46 100644
--- a/xml/parser.ixx
+++ b/xml/parser.ixx
@@ -6,6 +6,13 @@
namespace xml
{
+ template <typename T>
+ inline T parser::
+ value () const
+ {
+ return value_traits<T>::parse (value (), *this);
+ }
+
inline const std::string& parser::
attribute (const std::string& n) const
{