Bläddra i källkod

Extended XMLReader class

- parsing nodes will now parse node names, too
Patrick 4 år sedan
förälder
incheckning
49a554e9d7
2 ändrade filer med 10 tillägg och 4 borttagningar
  1. 8 3
      source/io/xml/XMLReader.cpp
  2. 2 1
      source/io/xml/XMLReader.hpp

+ 8 - 3
source/io/xml/XMLReader.cpp

@@ -96,9 +96,9 @@ std::shared_ptr<ls_std::XMLDeclaration> ls_std::XMLReader::_createDeclaration(co
   return declaration;
 }
 
-std::shared_ptr<ls_std::XMLNode> ls_std::XMLReader::_createNode(const std::list<std::pair<std::string, std::string>> &_attributes)
+std::shared_ptr<ls_std::XMLNode> ls_std::XMLReader::_createNode(const std::list<std::pair<std::string, std::string>> &_attributes, const std::string& _name)
 {
-  std::shared_ptr<ls_std::XMLNode> node = std::make_shared<ls_std::XMLNode>("_creation_token_");
+  std::shared_ptr<ls_std::XMLNode> node = std::make_shared<ls_std::XMLNode>(_name);
   std::shared_ptr<ls_std::XMLAttribute> attribute {};
 
   for(const auto& parsedAttribute : _attributes) {
@@ -238,7 +238,7 @@ size_t ls_std::XMLReader::_parseOpeningTag(const ls_std::byte_field &_data, std:
   ls_std::XMLParseData singleParseData {};
 
   if(isValidTagString) {
-    std::shared_ptr<ls_std::XMLNode> node = ls_std::XMLReader::_createNode(ls_std::XMLReader::_parseAttributes(tagString));
+    std::shared_ptr<ls_std::XMLNode> node = ls_std::XMLReader::_createNode(ls_std::XMLReader::_parseAttributes(tagString), ls_std::XMLReader::_parseTagName(tagString));
 
     if(!tagString.endsWith("/>")) {
       this->currentLevel += 1;
@@ -252,6 +252,11 @@ size_t ls_std::XMLReader::_parseOpeningTag(const ls_std::byte_field &_data, std:
   return !isValidTagString ? _index : _index + tagString.toString().size();
 }
 
+ls_std::byte_field ls_std::XMLReader::_parseTagName(const ls_std::byte_field &_data)
+{
+  return _data.substr(1, _data.find(' ') - 1);
+}
+
 void ls_std::XMLReader::_read(const ls_std::byte_field &_data)
 {
   for(std::string::size_type index = 0 ; index < _data.size() ; index++) {

+ 2 - 1
source/io/xml/XMLReader.hpp

@@ -51,7 +51,7 @@ namespace ls_std {
       static void _checkDocumentExistence(const std::shared_ptr<ls_std::XMLDocument>& _document);
       static void _checkFileExistence(ls_std::File _xmlFile);
       static std::shared_ptr<ls_std::XMLDeclaration> _createDeclaration(const std::list<std::pair<std::string, std::string>>& _attributes);
-      static std::shared_ptr<ls_std::XMLNode> _createNode(const std::list<std::pair<std::string, std::string>>& _attributes);
+      static std::shared_ptr<ls_std::XMLNode> _createNode(const std::list<std::pair<std::string, std::string>>& _attributes, const std::string& _name);
       static std::pair<std::string, std::string> _findAttribute(const std::list<std::pair<std::string, std::string>>& _attributes, const std::string& _name);
       static size_t _findAttributeEndPosition(const ls_std::byte_field& _data);
       static ls_std::byte_field _getNextTagString(const ls_std::byte_field& _data, std::string::size_type _index);
@@ -63,6 +63,7 @@ namespace ls_std {
       size_t _parseClosingTag(const ls_std::byte_field& _data, std::string::size_type _index);
       size_t _parseDeclaration(const ls_std::byte_field& _data, std::string::size_type _index);
       size_t _parseOpeningTag(const ls_std::byte_field& _data, std::string::size_type _index);
+      static ls_std::byte_field _parseTagName(const ls_std::byte_field& _data);
       void _read(const ls_std::byte_field& _data);
       void _reset();
   };