200 mnl = metadataElement.namedItem( u
"identifier"_s );
204 mnl = metadataElement.namedItem( u
"parentidentifier"_s );
208 mnl = metadataElement.namedItem( u
"language"_s );
212 mnl = metadataElement.namedItem( u
"type"_s );
213 mType = mnl.toElement().text();
216 mnl = metadataElement.namedItem( u
"title"_s );
217 mTitle = mnl.toElement().text();
220 mnl = metadataElement.namedItem( u
"abstract"_s );
228 const QDomNodeList
keywords = metadataElement.elementsByTagName( u
"keywords"_s );
230 for (
int i = 0; i <
keywords.size(); i++ )
232 QStringList keywordsList;
234 mne = mnl.toElement();
236 const QDomNodeList el = mne.elementsByTagName( u
"keyword"_s );
237 for (
int j = 0; j < el.size(); j++ )
239 keywordsList.append( el.at( j ).toElement().text() );
241 addKeywords( mne.attribute( u
"vocabulary"_s ), keywordsList );
245 const QDomNodeList contactsList = metadataElement.elementsByTagName( u
"contact"_s );
247 for (
int i = 0; i < contactsList.size(); i++ )
249 mnl = contactsList.at( i );
250 mne = mnl.toElement();
253 oneContact.
name = mne.namedItem( u
"name"_s ).toElement().text();
254 oneContact.
organization = mne.namedItem( u
"organization"_s ).toElement().text();
255 oneContact.
position = mne.namedItem( u
"position"_s ).toElement().text();
256 oneContact.
voice = mne.namedItem( u
"voice"_s ).toElement().text();
257 oneContact.
fax = mne.namedItem( u
"fax"_s ).toElement().text();
258 oneContact.
email = mne.namedItem( u
"email"_s ).toElement().text();
259 oneContact.
role = mne.namedItem( u
"role"_s ).toElement().text();
261 QList< QgsAbstractMetadataBase::Address > addresses;
262 const QDomNodeList addressList = mne.elementsByTagName( u
"contactAddress"_s );
263 for (
int j = 0; j < addressList.size(); j++ )
265 const QDomElement addressElement = addressList.at( j ).toElement();
267 oneAddress.
address = addressElement.namedItem( u
"address"_s ).toElement().text();
268 oneAddress.
administrativeArea = addressElement.namedItem( u
"administrativearea"_s ).toElement().text();
269 oneAddress.
city = addressElement.namedItem( u
"city"_s ).toElement().text();
270 oneAddress.
country = addressElement.namedItem( u
"country"_s ).toElement().text();
271 oneAddress.
postalCode = addressElement.namedItem( u
"postalcode"_s ).toElement().text();
272 oneAddress.
type = addressElement.namedItem( u
"type"_s ).toElement().text();
273 addresses << oneAddress;
280 mnl = metadataElement.namedItem( u
"links"_s );
281 mne = mnl.toElement();
283 const QDomNodeList el = mne.elementsByTagName( u
"link"_s );
284 for (
int i = 0; i < el.size(); i++ )
286 mne = el.at( i ).toElement();
288 oneLink.
name = mne.attribute( u
"name"_s );
289 oneLink.
type = mne.attribute( u
"type"_s );
290 oneLink.
url = mne.attribute( u
"url"_s );
291 oneLink.
description = mne.attribute( u
"description"_s );
292 oneLink.
format = mne.attribute( u
"format"_s );
293 oneLink.
mimeType = mne.attribute( u
"mimeType"_s );
294 oneLink.
size = mne.attribute( u
"size"_s );
299 const QDomNodeList historyNodeList = metadataElement.elementsByTagName( u
"history"_s );
300 QStringList historyList;
301 for (
int i = 0; i < historyNodeList.size(); i++ )
303 mnl = historyNodeList.at( i );
304 mne = mnl.toElement();
305 historyList.append( mne.text() );
311 const QDomElement dateElement = metadataElement.firstChildElement( u
"dates"_s );
312 if ( !dateElement.isNull() )
314 const QDomNodeList dateNodeList = dateElement.elementsByTagName( u
"date"_s );
315 const QMetaEnum dateEnum = QMetaEnum::fromType<Qgis::MetadataDateType>();
316 for (
int i = 0; i < dateNodeList.size(); i++ )
318 const QDomElement dateElement = dateNodeList.at( i ).toElement();
320 const QDateTime value = QDateTime::fromString( dateElement.attribute( u
"value"_s ), Qt::ISODate );
321 if ( value.isValid() && !value.isNull() )
333 QDomElement
identifier = document.createElement( u
"identifier"_s );
334 const QDomText identifierText = document.createTextNode(
mIdentifier );
339 QDomElement
parentIdentifier = document.createElement( u
"parentidentifier"_s );
340 const QDomText parentIdentifierText = document.createTextNode(
mParentIdentifier );
345 QDomElement
language = document.createElement( u
"language"_s );
346 const QDomText languageText = document.createTextNode(
mLanguage );
347 language.appendChild( languageText );
348 metadataElement.appendChild(
language );
351 QDomElement
type = document.createElement( u
"type"_s );
352 const QDomText typeText = document.createTextNode(
mType );
353 type.appendChild( typeText );
354 metadataElement.appendChild(
type );
357 QDomElement
title = document.createElement( u
"title"_s );
358 const QDomText titleText = document.createTextNode(
mTitle );
359 title.appendChild( titleText );
360 metadataElement.appendChild(
title );
363 QDomElement
abstract = document.createElement( u
"abstract"_s );
364 const QDomText abstractText = document.createTextNode(
mAbstract );
365 abstract.appendChild( abstractText );
366 metadataElement.appendChild(
abstract );
369 QMapIterator<QString, QStringList> i(
mKeywords );
370 while ( i.hasNext() )
373 QDomElement keywordsElement = document.createElement( u
"keywords"_s );
374 keywordsElement.setAttribute( u
"vocabulary"_s, i.key() );
375 const QStringList values = i.value();
376 for (
const QString &kw : values )
378 QDomElement keyword = document.createElement( u
"keyword"_s );
379 const QDomText keywordText = document.createTextNode( kw );
380 keyword.appendChild( keywordText );
381 keywordsElement.appendChild( keyword );
383 metadataElement.appendChild( keywordsElement );
389 QDomElement contactElement = document.createElement( u
"contact"_s );
390 QDomElement nameElement = document.createElement( u
"name"_s );
391 QDomElement organizationElement = document.createElement( u
"organization"_s );
392 QDomElement positionElement = document.createElement( u
"position"_s );
393 QDomElement voiceElement = document.createElement( u
"voice"_s );
394 QDomElement faxElement = document.createElement( u
"fax"_s );
395 QDomElement emailElement = document.createElement( u
"email"_s );
396 QDomElement roleElement = document.createElement( u
"role"_s );
398 const QDomText nameText = document.createTextNode( contact.name );
399 const QDomText orgaText = document.createTextNode( contact.organization );
400 const QDomText positionText = document.createTextNode( contact.position );
401 const QDomText voiceText = document.createTextNode( contact.voice );
402 const QDomText faxText = document.createTextNode( contact.fax );
403 const QDomText emailText = document.createTextNode( contact.email );
404 const QDomText roleText = document.createTextNode( contact.role );
408 QDomElement addressElement = document.createElement( u
"contactAddress"_s );
409 QDomElement typeElement = document.createElement( u
"type"_s );
410 QDomElement addressDetailedElement = document.createElement( u
"address"_s );
411 QDomElement cityElement = document.createElement( u
"city"_s );
412 QDomElement administrativeAreaElement = document.createElement( u
"administrativearea"_s );
413 QDomElement postalCodeElement = document.createElement( u
"postalcode"_s );
414 QDomElement countryElement = document.createElement( u
"country"_s );
416 typeElement.appendChild( document.createTextNode( oneAddress.
type ) );
417 addressDetailedElement.appendChild( document.createTextNode( oneAddress.
address ) );
418 cityElement.appendChild( document.createTextNode( oneAddress.
city ) );
419 administrativeAreaElement.appendChild( document.createTextNode( oneAddress.
administrativeArea ) );
420 postalCodeElement.appendChild( document.createTextNode( oneAddress.
postalCode ) );
421 countryElement.appendChild( document.createTextNode( oneAddress.
country ) );
423 addressElement.appendChild( typeElement );
424 addressElement.appendChild( addressDetailedElement );
425 addressElement.appendChild( cityElement );
426 addressElement.appendChild( administrativeAreaElement );
427 addressElement.appendChild( postalCodeElement );
428 addressElement.appendChild( countryElement );
429 contactElement.appendChild( addressElement );
432 nameElement.appendChild( nameText );
433 organizationElement.appendChild( orgaText );
434 positionElement.appendChild( positionText );
435 voiceElement.appendChild( voiceText );
436 faxElement.appendChild( faxText );
437 emailElement.appendChild( emailText );
438 roleElement.appendChild( roleText );
440 contactElement.appendChild( nameElement );
441 contactElement.appendChild( organizationElement );
442 contactElement.appendChild( positionElement );
443 contactElement.appendChild( voiceElement );
444 contactElement.appendChild( faxElement );
445 contactElement.appendChild( emailElement );
446 contactElement.appendChild( roleElement );
447 metadataElement.appendChild( contactElement );
451 QDomElement
links = document.createElement( u
"links"_s );
454 QDomElement linkElement = document.createElement( u
"link"_s );
455 linkElement.setAttribute( u
"name"_s, link.name );
456 linkElement.setAttribute( u
"type"_s, link.type );
457 linkElement.setAttribute( u
"url"_s, link.url );
458 linkElement.setAttribute( u
"description"_s, link.description );
459 linkElement.setAttribute( u
"format"_s, link.format );
460 linkElement.setAttribute( u
"mimeType"_s, link.mimeType );
461 linkElement.setAttribute( u
"size"_s, link.size );
462 links.appendChild( linkElement );
464 metadataElement.appendChild(
links );
469 QDomElement historyElement = document.createElement( u
"history"_s );
470 const QDomText historyText = document.createTextNode(
history );
471 historyElement.appendChild( historyText );
472 metadataElement.appendChild( historyElement );
477 const QMetaEnum dateEnum = QMetaEnum::fromType<Qgis::MetadataDateType>();
478 QDomElement datesElement = document.createElement( u
"dates"_s );
479 for (
int k = 0; k < dateEnum.keyCount(); k++ )
484 QDomElement dateElement = document.createElement( u
"date"_s );
485 dateElement.setAttribute( u
"type"_s, dateEnum.valueToKey(
static_cast< int >(
type ) ) );
486 dateElement.setAttribute( u
"value"_s,
mDates.value(
type ).toString( Qt::ISODate ) );
487 datesElement.appendChild( dateElement );
490 metadataElement.appendChild( datesElement );