22 #include "elementwrapper.h"
23 #include "constants.h"
27 #include <QtXml/QDomDocument>
28 #include <QtXml/QDomElement>
29 #include <QtCore/QString>
30 #include <QtCore/QStringList>
31 #include <QtCore/QTextStream>
33 namespace Syndication {
35 class ElementWrapper::ElementWrapperPrivate
40 QDomDocument ownerDoc;
42 mutable bool xmlBaseParsed;
44 mutable bool xmlLangParsed;
49 d->xmlBaseParsed =
true;
50 d->xmlLangParsed =
true;
61 d->ownerDoc = element.ownerDocument();
62 d->xmlBaseParsed =
false;
63 d->xmlLangParsed =
false;
78 return d->element == other.d->element;
83 return d->element.isNull();
93 if (!d->xmlBaseParsed)
95 QDomElement current = d->element;
111 while (!current.isNull())
113 if (current.hasAttributeNS(xmlNamespace(), QLatin1String(
"base")))
115 bases << current.attributeNS(xmlNamespace(), QLatin1String(
"base"));
118 QDomNode parent = current.parentNode();
120 if (!parent.isNull() && parent.isElement())
121 current = parent.toElement();
123 current = QDomElement();
125 while (!bases.isEmpty())
127 KUrl u(d->xmlBase, bases.takeLast());
128 d->xmlBase = u.url();
131 d->xmlBaseParsed =
true;
149 if (!d->xmlLangParsed)
151 QDomElement current = d->element;
153 while (!current.isNull())
155 if (current.hasAttributeNS(xmlNamespace(), QLatin1String(
"lang")))
157 d->xmlLang = current.attributeNS(xmlNamespace(), QLatin1String(
"lang"));
161 QDomNode parent = current.parentNode();
163 if (!parent.isNull() && parent.isElement())
164 current = parent.toElement();
166 current = QDomElement();
168 d->xmlLangParsed =
true;
175 QDomElement el = d->element.namedItem(tagName).toElement();
176 return el.isNull() ? QString() : el.text().trimmed();
182 return el.isNull() ? QString() : el.text().trimmed();
192 QDomNodeList list = parent.childNodes();
195 QTextStream ts( &str, QIODevice::WriteOnly );
200 QString base = wrapper.
xmlBase();
203 for (
int i = 0; i < list.count(); ++i)
205 QDomNode it = list.item(i);
206 if (!base.isEmpty() && it.isElement()
207 && !it.toElement().hasAttributeNS(xmlNamespace(), QLatin1String(
"base")))
209 it.toElement().setAttributeNS(xmlNamespace(), QLatin1String(
"base"), base);
214 return str.trimmed();
224 QList<QDomElement> elements;
225 for (QDomNode n = d->element.firstChild(); !n.isNull(); n = n.nextSibling())
229 QDomElement e = n.toElement();
230 if (e.tagName() == tagName)
240 return QDomElement();
242 for (QDomNode n = d->element.firstChild(); !n.isNull(); n = n.nextSibling())
246 QDomElement e = n.toElement();
247 if (e.localName() == localName && e.namespaceURI() == nsURI)
252 return QDomElement();
259 return QList<QDomElement>();
261 QList<QDomElement> elements;
262 for (QDomNode n = d->element.firstChild(); !n.isNull(); n = n.nextSibling())
266 QDomElement e = n.toElement();
267 if (e.localName() == localName && e.namespaceURI() == nsURI)
276 return d->element.text();
281 return d->element.attribute(name, defValue);
286 return d->element.attributeNS(nsURI, localName, defValue);
291 return d->element.hasAttribute(name);
296 return d->element.hasAttributeNS(nsURI, localName);