198 mnl = metadataElement.namedItem( u
"identifier"_s );
202 mnl = metadataElement.namedItem( u
"parentidentifier"_s );
206 mnl = metadataElement.namedItem( u
"language"_s );
210 mnl = metadataElement.namedItem( u
"type"_s );
211 mType = mnl.toElement().text();
214 mnl = metadataElement.namedItem( u
"title"_s );
215 mTitle = mnl.toElement().text();
218 mnl = metadataElement.namedItem( u
"abstract"_s );
226 const QDomNodeList
keywords = metadataElement.elementsByTagName( u
"keywords"_s );
228 for (
int i = 0; i <
keywords.size(); i++ )
230 QStringList keywordsList;
232 mne = mnl.toElement();
234 const QDomNodeList el = mne.elementsByTagName( u
"keyword"_s );
235 for (
int j = 0; j < el.size(); j++ )
237 keywordsList.append( el.at( j ).toElement().text() );
239 addKeywords( mne.attribute( u
"vocabulary"_s ), keywordsList );
243 const QDomNodeList contactsList = metadataElement.elementsByTagName( u
"contact"_s );
245 for (
int i = 0; i < contactsList.size(); i++ )
247 mnl = contactsList.at( i );
248 mne = mnl.toElement();
251 oneContact.
name = mne.namedItem( u
"name"_s ).toElement().text();
252 oneContact.
organization = mne.namedItem( u
"organization"_s ).toElement().text();
253 oneContact.
position = mne.namedItem( u
"position"_s ).toElement().text();
254 oneContact.
voice = mne.namedItem( u
"voice"_s ).toElement().text();
255 oneContact.
fax = mne.namedItem( u
"fax"_s ).toElement().text();
256 oneContact.
email = mne.namedItem( u
"email"_s ).toElement().text();
257 oneContact.
role = mne.namedItem( u
"role"_s ).toElement().text();
259 QList< QgsAbstractMetadataBase::Address > addresses;
260 const QDomNodeList addressList = mne.elementsByTagName( u
"contactAddress"_s );
261 for (
int j = 0; j < addressList.size(); j++ )
263 const QDomElement addressElement = addressList.at( j ).toElement();
265 oneAddress.
address = addressElement.namedItem( u
"address"_s ).toElement().text();
266 oneAddress.
administrativeArea = addressElement.namedItem( u
"administrativearea"_s ).toElement().text();
267 oneAddress.
city = addressElement.namedItem( u
"city"_s ).toElement().text();
268 oneAddress.
country = addressElement.namedItem( u
"country"_s ).toElement().text();
269 oneAddress.
postalCode = addressElement.namedItem( u
"postalcode"_s ).toElement().text();
270 oneAddress.
type = addressElement.namedItem( u
"type"_s ).toElement().text();
271 addresses << oneAddress;
278 mnl = metadataElement.namedItem( u
"links"_s );
279 mne = mnl.toElement();
281 const QDomNodeList el = mne.elementsByTagName( u
"link"_s );
282 for (
int i = 0; i < el.size(); i++ )
284 mne = el.at( i ).toElement();
286 oneLink.
name = mne.attribute( u
"name"_s );
287 oneLink.
type = mne.attribute( u
"type"_s );
288 oneLink.
url = mne.attribute( u
"url"_s );
289 oneLink.
description = mne.attribute( u
"description"_s );
290 oneLink.
format = mne.attribute( u
"format"_s );
291 oneLink.
mimeType = mne.attribute( u
"mimeType"_s );
292 oneLink.
size = mne.attribute( u
"size"_s );
297 const QDomNodeList historyNodeList = metadataElement.elementsByTagName( u
"history"_s );
298 QStringList historyList;
299 for (
int i = 0; i < historyNodeList.size(); i++ )
301 mnl = historyNodeList.at( i );
302 mne = mnl.toElement();
303 historyList.append( mne.text() );
309 const QDomElement dateElement = metadataElement.firstChildElement( u
"dates"_s );
310 if ( !dateElement.isNull() )
312 const QDomNodeList dateNodeList = dateElement.elementsByTagName( u
"date"_s );
313 const QMetaEnum dateEnum = QMetaEnum::fromType<Qgis::MetadataDateType>();
314 for (
int i = 0; i < dateNodeList.size(); i++ )
316 const QDomElement dateElement = dateNodeList.at( i ).toElement();
318 const QDateTime value = QDateTime::fromString( dateElement.attribute( u
"value"_s ), Qt::ISODate );
319 if ( value.isValid() && !value.isNull() )
331 QDomElement
identifier = document.createElement( u
"identifier"_s );
332 const QDomText identifierText = document.createTextNode(
mIdentifier );
337 QDomElement
parentIdentifier = document.createElement( u
"parentidentifier"_s );
338 const QDomText parentIdentifierText = document.createTextNode(
mParentIdentifier );
343 QDomElement
language = document.createElement( u
"language"_s );
344 const QDomText languageText = document.createTextNode(
mLanguage );
345 language.appendChild( languageText );
346 metadataElement.appendChild(
language );
349 QDomElement
type = document.createElement( u
"type"_s );
350 const QDomText typeText = document.createTextNode(
mType );
351 type.appendChild( typeText );
352 metadataElement.appendChild(
type );
355 QDomElement
title = document.createElement( u
"title"_s );
356 const QDomText titleText = document.createTextNode(
mTitle );
357 title.appendChild( titleText );
358 metadataElement.appendChild(
title );
361 QDomElement
abstract = document.createElement( u
"abstract"_s );
362 const QDomText abstractText = document.createTextNode(
mAbstract );
363 abstract.appendChild( abstractText );
364 metadataElement.appendChild(
abstract );
367 QMapIterator<QString, QStringList> i(
mKeywords );
368 while ( i.hasNext() )
371 QDomElement keywordsElement = document.createElement( u
"keywords"_s );
372 keywordsElement.setAttribute( u
"vocabulary"_s, i.key() );
373 const QStringList values = i.value();
374 for (
const QString &kw : values )
376 QDomElement keyword = document.createElement( u
"keyword"_s );
377 const QDomText keywordText = document.createTextNode( kw );
378 keyword.appendChild( keywordText );
379 keywordsElement.appendChild( keyword );
381 metadataElement.appendChild( keywordsElement );
387 QDomElement contactElement = document.createElement( u
"contact"_s );
388 QDomElement nameElement = document.createElement( u
"name"_s );
389 QDomElement organizationElement = document.createElement( u
"organization"_s );
390 QDomElement positionElement = document.createElement( u
"position"_s );
391 QDomElement voiceElement = document.createElement( u
"voice"_s );
392 QDomElement faxElement = document.createElement( u
"fax"_s );
393 QDomElement emailElement = document.createElement( u
"email"_s );
394 QDomElement roleElement = document.createElement( u
"role"_s );
396 const QDomText nameText = document.createTextNode( contact.name );
397 const QDomText orgaText = document.createTextNode( contact.organization );
398 const QDomText positionText = document.createTextNode( contact.position );
399 const QDomText voiceText = document.createTextNode( contact.voice );
400 const QDomText faxText = document.createTextNode( contact.fax );
401 const QDomText emailText = document.createTextNode( contact.email );
402 const QDomText roleText = document.createTextNode( contact.role );
406 QDomElement addressElement = document.createElement( u
"contactAddress"_s );
407 QDomElement typeElement = document.createElement( u
"type"_s );
408 QDomElement addressDetailedElement = document.createElement( u
"address"_s );
409 QDomElement cityElement = document.createElement( u
"city"_s );
410 QDomElement administrativeAreaElement = document.createElement( u
"administrativearea"_s );
411 QDomElement postalCodeElement = document.createElement( u
"postalcode"_s );
412 QDomElement countryElement = document.createElement( u
"country"_s );
414 typeElement.appendChild( document.createTextNode( oneAddress.
type ) );
415 addressDetailedElement.appendChild( document.createTextNode( oneAddress.
address ) );
416 cityElement.appendChild( document.createTextNode( oneAddress.
city ) );
417 administrativeAreaElement.appendChild( document.createTextNode( oneAddress.
administrativeArea ) );
418 postalCodeElement.appendChild( document.createTextNode( oneAddress.
postalCode ) );
419 countryElement.appendChild( document.createTextNode( oneAddress.
country ) );
421 addressElement.appendChild( typeElement );
422 addressElement.appendChild( addressDetailedElement );
423 addressElement.appendChild( cityElement );
424 addressElement.appendChild( administrativeAreaElement );
425 addressElement.appendChild( postalCodeElement );
426 addressElement.appendChild( countryElement );
427 contactElement.appendChild( addressElement );
430 nameElement.appendChild( nameText );
431 organizationElement.appendChild( orgaText );
432 positionElement.appendChild( positionText );
433 voiceElement.appendChild( voiceText );
434 faxElement.appendChild( faxText );
435 emailElement.appendChild( emailText );
436 roleElement.appendChild( roleText );
438 contactElement.appendChild( nameElement );
439 contactElement.appendChild( organizationElement );
440 contactElement.appendChild( positionElement );
441 contactElement.appendChild( voiceElement );
442 contactElement.appendChild( faxElement );
443 contactElement.appendChild( emailElement );
444 contactElement.appendChild( roleElement );
445 metadataElement.appendChild( contactElement );
449 QDomElement
links = document.createElement( u
"links"_s );
452 QDomElement linkElement = document.createElement( u
"link"_s );
453 linkElement.setAttribute( u
"name"_s, link.name );
454 linkElement.setAttribute( u
"type"_s, link.type );
455 linkElement.setAttribute( u
"url"_s, link.url );
456 linkElement.setAttribute( u
"description"_s, link.description );
457 linkElement.setAttribute( u
"format"_s, link.format );
458 linkElement.setAttribute( u
"mimeType"_s, link.mimeType );
459 linkElement.setAttribute( u
"size"_s, link.size );
460 links.appendChild( linkElement );
462 metadataElement.appendChild(
links );
467 QDomElement historyElement = document.createElement( u
"history"_s );
468 const QDomText historyText = document.createTextNode(
history );
469 historyElement.appendChild( historyText );
470 metadataElement.appendChild( historyElement );
475 const QMetaEnum dateEnum = QMetaEnum::fromType<Qgis::MetadataDateType>();
476 QDomElement datesElement = document.createElement( u
"dates"_s );
477 for (
int k = 0; k < dateEnum.keyCount(); k++ )
482 QDomElement dateElement = document.createElement( u
"date"_s );
483 dateElement.setAttribute( u
"type"_s, dateEnum.valueToKey(
static_cast< int >(
type ) ) );
484 dateElement.setAttribute( u
"value"_s,
mDates.value(
type ).toString( Qt::ISODate ) );
485 datesElement.appendChild( dateElement );
488 metadataElement.appendChild( datesElement );