void FarHrcSettings::readXML(String* file, bool userValue) { xercesc::XercesDOMParser xml_parser; XmlParserErrorHandler error_handler(nullptr); xml_parser.setErrorHandler(&error_handler); xml_parser.setLoadExternalDTD(false); xml_parser.setSkipDTDValidation(true); XmlInputSource* config = XmlInputSource::newInstance(file->getWChars(), static_cast<XMLCh*>(nullptr)); xml_parser.parse(*config->getInputSource()); if (error_handler.getSawErrors()) { delete config; throw ParserFactoryException(DString("Error reading hrcsettings.xml.")); } xercesc::DOMDocument* catalog = xml_parser.getDocument(); xercesc::DOMElement* elem = catalog->getDocumentElement(); const XMLCh* tagPrototype = L"prototype"; const XMLCh* tagHrcSettings = L"hrc-settings"; if (elem == nullptr || !xercesc::XMLString::equals(elem->getNodeName(), tagHrcSettings)) { delete config; throw FarHrcSettingsException(DString("main '<hrc-settings>' block not found")); } for (xercesc::DOMNode* node = elem->getFirstChild(); node != nullptr; node = node->getNextSibling()) { if (node->getNodeType() == xercesc::DOMNode::ELEMENT_NODE) { xercesc::DOMElement* subelem = static_cast<xercesc::DOMElement*>(node); if (xercesc::XMLString::equals(subelem->getNodeName(), tagPrototype)) { UpdatePrototype(subelem, userValue); } } } delete config; }
void FarHrcSettings::readXML(String *file, bool userValue) { DocumentBuilder docbuilder; InputSource *dfis = InputSource::newInstance(file); Document *xmlDocument = docbuilder.parse(dfis); Element *types = xmlDocument->getDocumentElement(); if (*types->getNodeName() != "hrc-settings"){ docbuilder.free(xmlDocument); throw FarHrcSettingsException(DString("main '<hrc-settings>' block not found")); } for (Node *elem = types->getFirstChild(); elem; elem = elem->getNextSibling()){ if (*elem->getNodeName() == "prototype"){ UpdatePrototype((Element*)elem, userValue); continue; } }; docbuilder.free(xmlDocument); delete dfis; }