/* Web Polygraph http://www.web-polygraph.org/
* (C) 2003-2006 The Measurement Factory
* Licensed under the Apache License, Version 2.0 */
#include "base/polygraph.h"
#include "xml/XmlNode.h"
#include "xml/XmlAttr.h"
#include "xml/XmlAttrs.h"
#include "xml/XmlNodes.h"
XmlNodes::XmlNodes(XmlNode *aParent): theParent(aParent) {
}
XmlNodes::XmlNodes(const XmlNodes &nodes): theParent(0) {
for (int i = 0; i < nodes.count(); ++i)
*this << *nodes[i];
}
XmlNodes::XmlNodes(const XmlNode &node): theParent(0) {
*this << node;
}
XmlNodes::~XmlNodes() {
while (count()) {
last()->parent(0);
delete pop();
}
}
int XmlNodes::selByTagName(const String &name, Res &res) const {
for (int i = 0; i < count(); ++i) {
const XmlNode *node = item(i);
if (node->name() == name)
res.append(node);
}
return res.count();
}
int XmlNodes::selByAttrName(const String &name, Res &res) const {
for (int i = 0; i < count(); ++i) {
const XmlNode *node = item(i);
if (node->attrs() && node->attrs()->has(name))
res.append(node);
}
return res.count();
}
int XmlNodes::selByAttrVal(const String &name, const String &value, Res &res) const {
for (int i = 0; i < count(); ++i) {
const XmlNode *node = item(i);
if (node->attrs() && node->attrs()->has(name, value))
res.append(node);
}
return res.count();
}
XmlNodes &XmlNodes::operator <<(const XmlAttr &a) {
for (int i = 0; i < count(); ++i)
item(i)->addAttr(a.clone());
return *this;
}
XmlNodes &XmlNodes::operator <<(const XmlNode &n) {
append(n.clone());
last()->parent(theParent);
return *this;
}
XmlNodes &XmlNodes::operator <<(const XmlNodes &ns) {
stretch(count() + ns.count());
for (int i = 0; i < ns.count(); ++i)
*this << *ns[i];
return *this;
}
ostream &XmlNodes::print(ostream &os, const String &pfx) const {
for (int i = 0; i < count(); ++i)
item(i)->print(os, pfx);
return os;
}
syntax highlighted by Code2HTML, v. 0.9.1