diff options
author | Remko Tronçon <git@el-tramo.be> | 2009-07-21 17:10:20 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2009-07-21 17:10:20 (GMT) |
commit | d0fdeeed970c8a60d3f07a7ac2f605e186b671ff (patch) | |
tree | 88945ac9d283974ac09969be711b848bcd8aa96a | |
parent | 741ee27a2b851d76b33f0ee5accd51ff973aa955 (diff) | |
download | swift-d0fdeeed970c8a60d3f07a7ac2f605e186b671ff.zip swift-d0fdeeed970c8a60d3f07a7ac2f605e186b671ff.tar.bz2 |
Add namespace support to LibXML parser.
-rw-r--r-- | Swiften/Parser/LibXMLParser.cpp | 20 | ||||
-rw-r--r-- | Swiften/Parser/LibXMLParser.h | 5 |
2 files changed, 9 insertions, 16 deletions
diff --git a/Swiften/Parser/LibXMLParser.cpp b/Swiften/Parser/LibXMLParser.cpp index 8f14f21..91ff72b 100644 --- a/Swiften/Parser/LibXMLParser.cpp +++ b/Swiften/Parser/LibXMLParser.cpp @@ -9,20 +9,16 @@ namespace Swift { -static void handleStartElement(void *client, const xmlChar* name, const xmlChar** attributes) { +static void handleStartElement(void *client, const xmlChar* name, const xmlChar*, const xmlChar* xmlns, int, const xmlChar**, int nbAttributes, int, const xmlChar ** attributes) { AttributeMap attributeValues; - const xmlChar** currentAttribute = attributes; - if (currentAttribute) { - while (*currentAttribute) { - attributeValues[String(reinterpret_cast<const char*>(*currentAttribute))] = String(reinterpret_cast<const char*>(*(currentAttribute+1))); - currentAttribute += 2; - } + for (int i = 0; i < nbAttributes*5; i += 5) { + attributeValues[String(reinterpret_cast<const char*>(attributes[i]))] = String(reinterpret_cast<const char*>(attributes[i+3]), attributes[i+4]-attributes[i+3]); } - static_cast<XMLParserClient*>(client)->handleStartElement(reinterpret_cast<const char*>(name), attributeValues); + static_cast<XMLParserClient*>(client)->handleStartElement(reinterpret_cast<const char*>(name), (xmlns ? reinterpret_cast<const char*>(xmlns) : String()), attributeValues); } -static void handleEndElement(void *client, const xmlChar* name) { - static_cast<XMLParserClient*>(client)->handleEndElement(reinterpret_cast<const char*>(name)); +static void handleEndElement(void *client, const xmlChar* name, const xmlChar*, const xmlChar* xmlns) { + static_cast<XMLParserClient*>(client)->handleEndElement(reinterpret_cast<const char*>(name), (xmlns ? reinterpret_cast<const char*>(xmlns) : String())); } static void handleCharacterData(void* client, const xmlChar* data, int len) { @@ -40,8 +36,8 @@ static void handleWarning(void*, const char*, ... ) { LibXMLParser::LibXMLParser(XMLParserClient* client) : XMLParser(client) { memset(&handler_, 0, sizeof(handler_) ); handler_.initialized = XML_SAX2_MAGIC; - handler_.startElement = &handleStartElement; - handler_.endElement = &handleEndElement; + handler_.startElementNs = &handleStartElement; + handler_.endElementNs = &handleEndElement; handler_.characters = &handleCharacterData; handler_.warning = &handleWarning; handler_.error = &handleError; diff --git a/Swiften/Parser/LibXMLParser.h b/Swiften/Parser/LibXMLParser.h index f8faef6..58a65f1 100644 --- a/Swiften/Parser/LibXMLParser.h +++ b/Swiften/Parser/LibXMLParser.h @@ -1,5 +1,4 @@ -#ifndef SWIFTEN_LibXMLParser_H -#define SWIFTEN_LibXMLParser_H +#pragma once #include <libxml/parser.h> #include <boost/noncopyable.hpp> @@ -19,5 +18,3 @@ namespace Swift { xmlParserCtxtPtr context_; }; } - -#endif |