summaryrefslogtreecommitdiff
path: root/src/utils/xmlutils.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-09-13 18:31:30 +0300
committerAndrei Karas <akaras@inbox.ru>2016-09-13 18:31:30 +0300
commitdca3de26978bf0a9d7ac9df8524c90b85f8920da (patch)
tree0d575e647028c1f3d75e5ee1e4d93603bcda1783 /src/utils/xmlutils.cpp
parent0dbd25bacb312932e343f154001531b6be84a6ac (diff)
downloadplus-dca3de26978bf0a9d7ac9df8524c90b85f8920da.tar.gz
plus-dca3de26978bf0a9d7ac9df8524c90b85f8920da.tar.bz2
plus-dca3de26978bf0a9d7ac9df8524c90b85f8920da.tar.xz
plus-dca3de26978bf0a9d7ac9df8524c90b85f8920da.zip
Add into xmlutils function for read xml file into int map.
Diffstat (limited to 'src/utils/xmlutils.cpp')
-rw-r--r--src/utils/xmlutils.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/utils/xmlutils.cpp b/src/utils/xmlutils.cpp
index fdcc272ec..5cc14f517 100644
--- a/src/utils/xmlutils.cpp
+++ b/src/utils/xmlutils.cpp
@@ -130,3 +130,57 @@ void readXmlStringMap(const std::string &fileName,
}
}
}
+
+void readXmlIntMap(const std::string &fileName,
+ const std::string &rootName,
+ const std::string &sectionName,
+ const std::string &itemName,
+ const std::string &attributeKeyName,
+ const std::string &attributeValueName,
+ std::map<int32_t, int32_t> &arr,
+ const SkipError skipError)
+{
+ XML::Document doc(fileName, UseResman_true, skipError);
+ const XmlNodePtrConst rootNode = doc.rootNode();
+
+ if (!rootNode || !xmlNameEqual(rootNode, rootName.c_str()))
+ {
+ logger->log("Error while loading %s!", fileName.c_str());
+ return;
+ }
+
+ for_each_xml_child_node(sectionNode, rootNode)
+ {
+ if (!xmlNameEqual(sectionNode, sectionName.c_str()))
+ continue;
+ for_each_xml_child_node(childNode, sectionNode)
+ {
+ if (xmlNameEqual(childNode, itemName.c_str()))
+ {
+ const std::string key = XML::getProperty(childNode,
+ attributeKeyName.c_str(), "");
+ if (key.empty())
+ continue;
+ const int32_t val = XML::getProperty(childNode,
+ attributeValueName.c_str(), 0);
+ arr[atoi(key.c_str())] = val;
+ }
+ else if (xmlNameEqual(childNode, "include"))
+ {
+ const std::string name = XML::getProperty(
+ childNode, "name", "");
+ if (!name.empty())
+ {
+ readXmlIntMap(name,
+ rootName,
+ sectionName,
+ itemName,
+ attributeKeyName,
+ attributeValueName,
+ arr,
+ skipError);
+ }
+ }
+ }
+ }
+}