- template <class T>
- boost::shared_ptr<T> optional_sub_node (std::string name) {
- std::list<xmlpp::Node*> n = xml_nodes (name);
- if (n.size() > 1) {
- throw XMLError ("duplicate XML tag");
- } else if (n.empty ()) {
- return boost::shared_ptr<T> ();
- }
-
- return boost::shared_ptr<T> (new T (n.front ()));
- }
-
- template <class T>
- std::list<boost::shared_ptr<T> > sub_nodes (std::string name, std::string sub) {
- XMLNode p (xml_node (name));
- std::list<xmlpp::Node*> n = p.xml_nodes (sub);
- std::list<boost::shared_ptr<T> > r;
- for (typename std::list<xmlpp::Node*>::iterator i = n.begin(); i != n.end(); ++i) {
- r.push_back (boost::shared_ptr<T> (new T (*i)));
- }
- return r;
+namespace libdcp
+{
+
+template <class T>
+boost::shared_ptr<T>
+optional_type_child (cxml::Node const & node, std::string name)
+{
+ std::list<boost::shared_ptr<cxml::Node> > n = node.node_children (name);
+ if (n.size() > 1) {
+ throw XMLError ("duplicate XML tag");
+ } else if (n.empty ()) {
+ return boost::shared_ptr<T> ();