22 #include "elementwrapper.h"
23 #include "constants.h"
27 #include <QtXml/QDomDocument>
28 #include <QtXml/QDomElement>
29 #include <QtCore/QString>
30 #include <QtCore/QTextStream>
32 namespace Syndication {
34 class ElementWrapper::ElementWrapperPrivate
39 QDomDocument ownerDoc;
41 mutable bool xmlBaseParsed;
43 mutable bool xmlLangParsed;
48 d->xmlBaseParsed =
true;
49 d->xmlLangParsed =
true;
60 d->ownerDoc = element.ownerDocument();
61 d->xmlBaseParsed =
false;
62 d->xmlLangParsed =
false;
77 return d->element == other.d->element;
82 return d->element.isNull();
92 if (!d->xmlBaseParsed)
94 QDomElement current = d->element;
96 while (!current.isNull())
98 if (current.hasAttributeNS(xmlNamespace(), QLatin1String(
"base")))
100 d->xmlBase = current.attributeNS(xmlNamespace(), QLatin1String(
"base"));
104 QDomNode parent = current.parentNode();
106 if (!parent.isNull() && parent.isElement())
107 current = parent.toElement();
109 current = QDomElement();
112 d->xmlBaseParsed =
true;
130 if (!d->xmlLangParsed)
132 QDomElement current = d->element;
134 while (!current.isNull())
136 if (current.hasAttributeNS(xmlNamespace(), QLatin1String(
"lang")))
138 d->xmlLang = current.attributeNS(xmlNamespace(), QLatin1String(
"lang"));
142 QDomNode parent = current.parentNode();
144 if (!parent.isNull() && parent.isElement())
145 current = parent.toElement();
147 current = QDomElement();
149 d->xmlLangParsed =
true;
156 QDomElement el = d->element.namedItem(tagName).toElement();
157 return el.isNull() ? QString() : el.text().trimmed();
163 return el.isNull() ? QString() : el.text().trimmed();
173 QDomNodeList list = parent.childNodes();
176 QTextStream ts( &str, QIODevice::WriteOnly );
181 QString base = wrapper.
xmlBase();
184 for (
int i = 0; i < list.count(); ++i)
186 QDomNode it = list.item(i);
187 if (!base.isEmpty() && it.isElement()
188 && !it.toElement().hasAttributeNS(xmlNamespace(), QLatin1String(
"base")))
190 it.toElement().setAttributeNS(xmlNamespace(), QLatin1String(
"base"), base);
195 return str.trimmed();
205 QList<QDomElement> elements;
206 for (QDomNode n = d->element.firstChild(); !n.isNull(); n = n.nextSibling())
210 QDomElement e = n.toElement();
211 if (e.tagName() == tagName)
221 return QDomElement();
223 for (QDomNode n = d->element.firstChild(); !n.isNull(); n = n.nextSibling())
227 QDomElement e = n.toElement();
228 if (e.localName() == localName && e.namespaceURI() == nsURI)
233 return QDomElement();
240 return QList<QDomElement>();
242 QList<QDomElement> elements;
243 for (QDomNode n = d->element.firstChild(); !n.isNull(); n = n.nextSibling())
247 QDomElement e = n.toElement();
248 if (e.localName() == localName && e.namespaceURI() == nsURI)
257 return d->element.text();
262 return d->element.attribute(name, defValue);
267 return d->element.attributeNS(nsURI, localName, defValue);
272 return d->element.hasAttribute(name);
277 return d->element.hasAttributeNS(nsURI, localName);