| 57 | SAXParser::~SAXParser() { } |
| 58 | |
| 59 | std::optional<SAXParser::SAXError> SAXParser::parse(const std::string& xmlData) { |
| 60 | tinyxml2::XMLError error = _tinyDoc.Parse(xmlData.c_str(), xmlData.size()); |
| 61 | if (error != tinyxml2::XML_NO_ERROR) { |
| 62 | int errorLine = _tinyDoc.GetErrorLine(); |
| 63 | std::string errorMessage; |
| 64 | switch (error) { |
| 65 | case tinyxml2::XML_NO_ATTRIBUTE: errorMessage += "no attribute"; break; |
| 66 | case tinyxml2::XML_WRONG_ATTRIBUTE_TYPE: errorMessage += "wrong attribute type"; break; |
| 67 | case tinyxml2::XML_ERROR_FILE_NOT_FOUND: errorMessage += "file not found"; break; |
| 68 | case tinyxml2::XML_ERROR_FILE_COULD_NOT_BE_OPENED: errorMessage += "file could not be opened"; break; |
| 69 | case tinyxml2::XML_ERROR_FILE_READ_ERROR: errorMessage += "file read error"; break; |
| 70 | case tinyxml2::XML_ERROR_ELEMENT_MISMATCH: errorMessage += "element mismatch"; break; |
| 71 | case tinyxml2::XML_ERROR_PARSING_ELEMENT: errorMessage += "parsing element error"; break; |
| 72 | case tinyxml2::XML_ERROR_PARSING_ATTRIBUTE: errorMessage += "parsing attribute error"; break; |
| 73 | case tinyxml2::XML_ERROR_IDENTIFYING_TAG: errorMessage += "identifying tag error"; break; |
| 74 | case tinyxml2::XML_ERROR_PARSING_TEXT: errorMessage += "parsing text error"; break; |
| 75 | case tinyxml2::XML_ERROR_PARSING_CDATA: errorMessage += "parsing cdata error"; break; |
| 76 | case tinyxml2::XML_ERROR_PARSING_COMMENT: errorMessage += "parsing comment error"; break; |
| 77 | case tinyxml2::XML_ERROR_PARSING_DECLARATION: errorMessage += "parsing declaration error"; break; |
| 78 | case tinyxml2::XML_ERROR_PARSING_UNKNOWN: errorMessage += "parsing unknown error"; break; |
| 79 | case tinyxml2::XML_ERROR_EMPTY_DOCUMENT: errorMessage += "empty document"; break; |
| 80 | case tinyxml2::XML_ERROR_MISMATCHED_ELEMENT: errorMessage += "mismatch element"; break; |
| 81 | case tinyxml2::XML_ERROR_PARSING: errorMessage += "parsing error"; break; |
| 82 | case tinyxml2::XML_CAN_NOT_CONVERT_TEXT: errorMessage += "can not convert text"; break; |
| 83 | case tinyxml2::XML_NO_TEXT_NODE: errorMessage += "no text node"; break; |
| 84 | default: |
| 85 | break; |
| 86 | } |
| 87 | return SAXError{errorLine, errorMessage}; |
| 88 | } |
| 89 | XmlSaxHander printer; |
| 90 | printer.setSAXParser(this); |
| 91 | _tinyDoc.Accept(&printer); |
| 92 | return std::nullopt; |
| 93 | } |
| 94 | |
| 95 | const char* SAXParser::getBuffer() const { |
| 96 | return _tinyDoc.GetCharBuffer(); |
nothing calls this directly
no test coverage detected