-
- void parse_xml_config_dom() {
- if (m_xmlconf_doc)
- {
- const xmlNode* root = xmlDocGetRootElement(m_xmlconf_doc);
-
- if (std::string((const char *) root->name) != "yp2")
- xml_dom_error(root, "expected <yp2>, got ");
-
-
- for (const struct _xmlAttr *attr = root->properties; attr; attr = attr->next)
- {
- if (std::string((const char *)attr->name) == "xmlns")
- {
- const xmlNode *val = attr->children;
- //BOOST_CHECK_EQUAL(val->type, XML_TEXT_NODE);
- if (std::string((const char *)val->content)
- != "http://indexdata.dk/yp2/config/1")
- xml_dom_error(root,
- "expected xmlns=\"http://indexdata.dk/yp2/config/1\", got ");
- }
- }
- std::cout << "processing /yp2" << std::endl;
-
- // process <start> node which is expected first element node
- const xmlNode* node = root->children;
- for (; node && node->type != XML_ELEMENT_NODE; node = node->next)
- ;
- if (std::string((const char *)node->name)
- != "start")
- xml_dom_error(root, "expected <start>, got ");
-
- std::cout << "processing /yp2/start" << std::endl;
-
- // process <filters> node which is expected second element node
- node = node->next;
- for (; node && node->type != XML_ELEMENT_NODE; node = node->next)
- ;
- if (std::string((const char *)node->name)
- != "filters")
- xml_dom_error(root, "expected <filters>, got ");
-
- std::cout << "processing /yp2/filters" << std::endl;
-
- // process <filter> nodes in next level
- const xmlNode* node2 = node->children;
- for (; node2 && node2->type != XML_ELEMENT_NODE; node2 = node2->next)
- ;
- if (std::string((const char *)node2->name)
- != "filter")
- xml_dom_error(root, "expected <filter>, got ");
-
- //while(node2 && std::string((const char *)node2->name) == "filter"){
- std::cout << "processing /yp2/filters/filter" << std::endl;
- //for (; node2 && node2->type != XML_ELEMENT_NODE; node2 = node2->next)
- // ;
- //if(node2->type != XML_ELEMENT_NODE)
- // break;
- //}
-
- // process <routes> node which is expected third element node
- node = node->next;
- for (; node && node->type != XML_ELEMENT_NODE; node = node->next)
- ;
- if (std::string((const char *)node->name)
- != "routes")
- xml_dom_error(root, "expected <routes>, got ");
-
- std::cout << "processing /yp2/routes" << std::endl;
-
- // process <route> nodes in next level
- node2 = node->children;
- for (; node2 && node2->type != XML_ELEMENT_NODE; node2 = node2->next)
- ;
- if (std::string((const char *)node2->name)
- != "route")
- xml_dom_error(root, "expected <route>, got ");
-
- std::cout << "processing /yp2/routes/route" << std::endl;
-
- // process <filter> nodes in third level
- const xmlNode* node3 = node2->children;
- for (; node3 && node3->type != XML_ELEMENT_NODE; node3 = node3->next)
- ;
- if (std::string((const char *)node3->name)
- != "filter")
- xml_dom_error(root, "expected <filter>, got ");
-
- std::cout << "processing /yp2/routes/route/filter" << std::endl;
- }
- }
-
-
-
-#if 0
- void parse_xml_config_xmlreader() {
-
- xmlTextReader* reader;
- //reader->SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1);
- int ret;
- //reader = xmlReaderForFile(m_xmlconf.c_str(), NULL, 0);
- reader = xmlReaderWalker(m_xmlconf_doc);
-
- if (reader == NULL) {
- std::cerr << "failed to read XML config file "
- << std::endl
- << m_xmlconf << std::endl;
- std::exit(1);
- }
-
-
- // root element processing
- xml_progress_deep_to_element(reader);
- if (std::string("yp2") != (const char*)xmlTextReaderConstName(reader))
- xml_error(reader, "root element must be named <yp2>");
-
- std::cout << "<" << xmlTextReaderConstName(reader);
-
- //if (xmlTextReaderHasAttributes(reader))
- //if ((!xmlTextReaderMoveToAttributeNs(reader, NULL,
- // (const xmlChar*)"http://indexdata.dk/yp2/config/1" )))
- if ((!xmlTextReaderMoveToFirstAttribute(reader))
- || (! xmlTextReaderIsNamespaceDecl(reader))
- || (std::string("http://indexdata.dk/yp2/config/1")
- != (const char*)xmlTextReaderConstValue(reader)))
- xml_error(reader, "expected root element <yp2> in namespace "
- "'http://indexdata.dk/yp2/config/1'");
-
- std::cout << " " << xmlTextReaderConstName(reader) << "=\""
- << xmlTextReaderConstValue(reader) << "\">"
- //<< xmlTextReaderIsNamespaceDecl(reader)
- << std::endl;
-
-
- // start element processing
- xml_progress_deep_to_element(reader);
- if (std::string("start") != (const char*)xmlTextReaderConstName(reader)
- || !xmlTextReaderMoveToFirstAttribute(reader)
- || std::string("route") != (const char*)xmlTextReaderConstName(reader)
- )
- xml_error(reader, "start element <start route=\"route_id\"/> expected");
-
- std::cout << "<start " << xmlTextReaderConstName(reader) << "=\""
- << xmlTextReaderConstValue(reader) << "\"/>" << std::endl;
- //<< xmlTextReaderGetAttribute(reader, (const xmlChar *)"route")
-
-
- // filters element processing
- xml_progress_flat_to_element(reader);