194 mnl = metadataElement.namedItem( u
"identifier"_s );
198 mnl = metadataElement.namedItem( u
"parentidentifier"_s );
202 mnl = metadataElement.namedItem( u
"language"_s );
206 mnl = metadataElement.namedItem( u
"type"_s );
207 mType = mnl.toElement().text();
210 mnl = metadataElement.namedItem( u
"title"_s );
211 mTitle = mnl.toElement().text();
214 mnl = metadataElement.namedItem( u
"abstract"_s );
222 const QDomNodeList
keywords = metadataElement.elementsByTagName( u
"keywords"_s );
224 for (
int i = 0; i <
keywords.size(); i++ )
226 QStringList keywordsList;
228 mne = mnl.toElement();
230 const QDomNodeList el = mne.elementsByTagName( u
"keyword"_s );
231 for (
int j = 0; j < el.size(); j++ )
233 keywordsList.append( el.at( j ).toElement().text() );
235 addKeywords( mne.attribute( u
"vocabulary"_s ), keywordsList );
239 const QDomNodeList contactsList = metadataElement.elementsByTagName( u
"contact"_s );
241 for (
int i = 0; i < contactsList.size(); i++ )
243 mnl = contactsList.at( i );
244 mne = mnl.toElement();
247 oneContact.
name = mne.namedItem( u
"name"_s ).toElement().text();
248 oneContact.
organization = mne.namedItem( u
"organization"_s ).toElement().text();
249 oneContact.
position = mne.namedItem( u
"position"_s ).toElement().text();
250 oneContact.
voice = mne.namedItem( u
"voice"_s ).toElement().text();
251 oneContact.
fax = mne.namedItem( u
"fax"_s ).toElement().text();
252 oneContact.
email = mne.namedItem( u
"email"_s ).toElement().text();
253 oneContact.
role = mne.namedItem( u
"role"_s ).toElement().text();
255 QList< QgsAbstractMetadataBase::Address > addresses;
256 const QDomNodeList addressList = mne.elementsByTagName( u
"contactAddress"_s );
257 for (
int j = 0; j < addressList.size(); j++ )
259 const QDomElement addressElement = addressList.at( j ).toElement();
261 oneAddress.
address = addressElement.namedItem( u
"address"_s ).toElement().text();
262 oneAddress.
administrativeArea = addressElement.namedItem( u
"administrativearea"_s ).toElement().text();
263 oneAddress.
city = addressElement.namedItem( u
"city"_s ).toElement().text();
264 oneAddress.
country = addressElement.namedItem( u
"country"_s ).toElement().text();
265 oneAddress.
postalCode = addressElement.namedItem( u
"postalcode"_s ).toElement().text();
266 oneAddress.
type = addressElement.namedItem( u
"type"_s ).toElement().text();
267 addresses << oneAddress;
274 mnl = metadataElement.namedItem( u
"links"_s );
275 mne = mnl.toElement();
277 const QDomNodeList el = mne.elementsByTagName( u
"link"_s );
278 for (
int i = 0; i < el.size(); i++ )
280 mne = el.at( i ).toElement();
282 oneLink.
name = mne.attribute( u
"name"_s );
283 oneLink.
type = mne.attribute( u
"type"_s );
284 oneLink.
url = mne.attribute( u
"url"_s );
285 oneLink.
description = mne.attribute( u
"description"_s );
286 oneLink.
format = mne.attribute( u
"format"_s );
287 oneLink.
mimeType = mne.attribute( u
"mimeType"_s );
288 oneLink.
size = mne.attribute( u
"size"_s );
293 const QDomNodeList historyNodeList = metadataElement.elementsByTagName( u
"history"_s );
294 QStringList historyList;
295 for (
int i = 0; i < historyNodeList.size(); i++ )
297 mnl = historyNodeList.at( i );
298 mne = mnl.toElement();
299 historyList.append( mne.text() );
305 const QDomElement dateElement = metadataElement.firstChildElement( u
"dates"_s );
306 if ( !dateElement.isNull() )
308 const QDomNodeList dateNodeList = dateElement.elementsByTagName( u
"date"_s );
309 const QMetaEnum dateEnum = QMetaEnum::fromType<Qgis::MetadataDateType>();
310 for (
int i = 0; i < dateNodeList.size(); i++ )
312 const QDomElement dateElement = dateNodeList.at( i ).toElement();
314 const QDateTime value = QDateTime::fromString( dateElement.attribute( u
"value"_s ), Qt::ISODate );
315 if ( value.isValid() && !value.isNull() )
327 QDomElement
identifier = document.createElement( u
"identifier"_s );
328 const QDomText identifierText = document.createTextNode(
mIdentifier );
333 QDomElement
parentIdentifier = document.createElement( u
"parentidentifier"_s );
334 const QDomText parentIdentifierText = document.createTextNode(
mParentIdentifier );
339 QDomElement
language = document.createElement( u
"language"_s );
340 const QDomText languageText = document.createTextNode(
mLanguage );
341 language.appendChild( languageText );
342 metadataElement.appendChild(
language );
345 QDomElement
type = document.createElement( u
"type"_s );
346 const QDomText typeText = document.createTextNode(
mType );
347 type.appendChild( typeText );
348 metadataElement.appendChild(
type );
351 QDomElement
title = document.createElement( u
"title"_s );
352 const QDomText titleText = document.createTextNode(
mTitle );
353 title.appendChild( titleText );
354 metadataElement.appendChild(
title );
357 QDomElement
abstract = document.createElement( u
"abstract"_s );
358 const QDomText abstractText = document.createTextNode(
mAbstract );
359 abstract.appendChild( abstractText );
360 metadataElement.appendChild(
abstract );
363 QMapIterator<QString, QStringList> i(
mKeywords );
364 while ( i.hasNext() )
367 QDomElement keywordsElement = document.createElement( u
"keywords"_s );
368 keywordsElement.setAttribute( u
"vocabulary"_s, i.key() );
369 const QStringList values = i.value();
370 for (
const QString &kw : values )
372 QDomElement keyword = document.createElement( u
"keyword"_s );
373 const QDomText keywordText = document.createTextNode( kw );
374 keyword.appendChild( keywordText );
375 keywordsElement.appendChild( keyword );
377 metadataElement.appendChild( keywordsElement );
383 QDomElement contactElement = document.createElement( u
"contact"_s );
384 QDomElement nameElement = document.createElement( u
"name"_s );
385 QDomElement organizationElement = document.createElement( u
"organization"_s );
386 QDomElement positionElement = document.createElement( u
"position"_s );
387 QDomElement voiceElement = document.createElement( u
"voice"_s );
388 QDomElement faxElement = document.createElement( u
"fax"_s );
389 QDomElement emailElement = document.createElement( u
"email"_s );
390 QDomElement roleElement = document.createElement( u
"role"_s );
392 const QDomText nameText = document.createTextNode( contact.name );
393 const QDomText orgaText = document.createTextNode( contact.organization );
394 const QDomText positionText = document.createTextNode( contact.position );
395 const QDomText voiceText = document.createTextNode( contact.voice );
396 const QDomText faxText = document.createTextNode( contact.fax );
397 const QDomText emailText = document.createTextNode( contact.email );
398 const QDomText roleText = document.createTextNode( contact.role );
402 QDomElement addressElement = document.createElement( u
"contactAddress"_s );
403 QDomElement typeElement = document.createElement( u
"type"_s );
404 QDomElement addressDetailedElement = document.createElement( u
"address"_s );
405 QDomElement cityElement = document.createElement( u
"city"_s );
406 QDomElement administrativeAreaElement = document.createElement( u
"administrativearea"_s );
407 QDomElement postalCodeElement = document.createElement( u
"postalcode"_s );
408 QDomElement countryElement = document.createElement( u
"country"_s );
410 typeElement.appendChild( document.createTextNode( oneAddress.
type ) );
411 addressDetailedElement.appendChild( document.createTextNode( oneAddress.
address ) );
412 cityElement.appendChild( document.createTextNode( oneAddress.
city ) );
413 administrativeAreaElement.appendChild( document.createTextNode( oneAddress.
administrativeArea ) );
414 postalCodeElement.appendChild( document.createTextNode( oneAddress.
postalCode ) );
415 countryElement.appendChild( document.createTextNode( oneAddress.
country ) );
417 addressElement.appendChild( typeElement );
418 addressElement.appendChild( addressDetailedElement );
419 addressElement.appendChild( cityElement );
420 addressElement.appendChild( administrativeAreaElement );
421 addressElement.appendChild( postalCodeElement );
422 addressElement.appendChild( countryElement );
423 contactElement.appendChild( addressElement );
426 nameElement.appendChild( nameText );
427 organizationElement.appendChild( orgaText );
428 positionElement.appendChild( positionText );
429 voiceElement.appendChild( voiceText );
430 faxElement.appendChild( faxText );
431 emailElement.appendChild( emailText );
432 roleElement.appendChild( roleText );
434 contactElement.appendChild( nameElement );
435 contactElement.appendChild( organizationElement );
436 contactElement.appendChild( positionElement );
437 contactElement.appendChild( voiceElement );
438 contactElement.appendChild( faxElement );
439 contactElement.appendChild( emailElement );
440 contactElement.appendChild( roleElement );
441 metadataElement.appendChild( contactElement );
445 QDomElement
links = document.createElement( u
"links"_s );
448 QDomElement linkElement = document.createElement( u
"link"_s );
449 linkElement.setAttribute( u
"name"_s, link.name );
450 linkElement.setAttribute( u
"type"_s, link.type );
451 linkElement.setAttribute( u
"url"_s, link.url );
452 linkElement.setAttribute( u
"description"_s, link.description );
453 linkElement.setAttribute( u
"format"_s, link.format );
454 linkElement.setAttribute( u
"mimeType"_s, link.mimeType );
455 linkElement.setAttribute( u
"size"_s, link.size );
456 links.appendChild( linkElement );
458 metadataElement.appendChild(
links );
463 QDomElement historyElement = document.createElement( u
"history"_s );
464 const QDomText historyText = document.createTextNode(
history );
465 historyElement.appendChild( historyText );
466 metadataElement.appendChild( historyElement );
471 const QMetaEnum dateEnum = QMetaEnum::fromType<Qgis::MetadataDateType>();
472 QDomElement datesElement = document.createElement( u
"dates"_s );
473 for (
int k = 0; k < dateEnum.keyCount(); k++ )
478 QDomElement dateElement = document.createElement( u
"date"_s );
479 dateElement.setAttribute( u
"type"_s, dateEnum.valueToKey(
static_cast< int >(
type ) ) );
480 dateElement.setAttribute( u
"value"_s,
mDates.value(
type ).toString( Qt::ISODate ) );
481 datesElement.appendChild( dateElement );
484 metadataElement.appendChild( datesElement );