summaryrefslogtreecommitdiffstats
path: root/src/uscxml/DOMUtils.cpp
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-01-08 03:15:10 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-01-08 03:15:10 (GMT)
commita39086067c99ab691f704017ff853250469aa91a (patch)
tree7e7ad0598f5cdfc477aa08f9b833afb8cdf3b2ac /src/uscxml/DOMUtils.cpp
parent9629ef3f969e31dfd19efa27e62487fc46610416 (diff)
downloaduscxml-a39086067c99ab691f704017ff853250469aa91a.zip
uscxml-a39086067c99ab691f704017ff853250469aa91a.tar.gz
uscxml-a39086067c99ab691f704017ff853250469aa91a.tar.bz2
Updated IM invoker for latest libpurple
Diffstat (limited to 'src/uscxml/DOMUtils.cpp')
-rw-r--r--src/uscxml/DOMUtils.cpp40
1 files changed, 38 insertions, 2 deletions
diff --git a/src/uscxml/DOMUtils.cpp b/src/uscxml/DOMUtils.cpp
index e54099e..c38b087 100644
--- a/src/uscxml/DOMUtils.cpp
+++ b/src/uscxml/DOMUtils.cpp
@@ -67,6 +67,42 @@ std::string DOMUtils::xPathForNode(const Arabica::DOM::Node<std::string>& node)
return xPath;
}
+std::list<Arabica::DOM::Node<std::string> > DOMUtils::getElementsByType(const Arabica::DOM::Node<std::string>& root, Arabica::DOM::Node_base::Type type) {
+ std::list<Arabica::DOM::Node<std::string> > result;
+ std::list<Arabica::DOM::Node<std::string> > stack;
+ std::list<Arabica::DOM::Node<std::string> >::iterator stackIter;
+
+ if (!root)
+ return result;
+
+ stack.push_back(root);
+ while(stack.size() > 0) {
+// for(stackIter = stack.begin(); stackIter != stack.end(); stackIter++) {
+// std::cout << stackIter->getNodeType() << " " << stackIter->getLocalName() << " " << stackIter->getNodeValue() << std::endl;
+// }
+// std::cout << std::endl;
+
+ Arabica::DOM::Node<std::string> currNode = stack.back();
+ if (currNode.hasChildNodes()) {
+ stack.push_back(currNode.getFirstChild());
+ continue;
+ }
+
+ // roll back stack and pop everyone without next sibling
+ do {
+ currNode = stack.back();
+ if (currNode.getNodeType() == type)
+ result.push_back(currNode);
+ stack.pop_back();
+ if (currNode.getNextSibling()) {
+ stack.push_back(currNode.getNextSibling());
+ break;
+ }
+ } while(stack.size() > 0);
+ }
+ return result;
+}
+
NameSpacingParser NameSpacingParser::fromXML(const std::string& xml) {
std::stringstream* ss = new std::stringstream();
(*ss) << xml;
@@ -81,8 +117,8 @@ NameSpacingParser NameSpacingParser::fromInputSource(Arabica::SAX::InputSource<s
NameSpacingParser parser;
if(!parser.parse(source) || !parser.getDocument().hasChildNodes()) {
if(parser._errorHandler.errorsReported()) {
- LOG(ERROR) << "could not parse input:";
- LOG(ERROR) << parser._errorHandler.errors() << std::endl;
+// LOG(ERROR) << "could not parse input:";
+// LOG(ERROR) << parser._errorHandler.errors() << std::endl;
} else {
Arabica::SAX::InputSourceResolver resolver(source, Arabica::default_string_adaptor<std::string>());
if (!resolver.resolve()) {