diff --git a/src/providers/wms/qgswmscapabilities.cpp b/src/providers/wms/qgswmscapabilities.cpp index 7a7f59d4667..0d09b46be05 100644 --- a/src/providers/wms/qgswmscapabilities.cpp +++ b/src/providers/wms/qgswmscapabilities.cpp @@ -783,6 +783,34 @@ void QgsWmsCapabilities::parseLegendUrl( QDomElement const &e, QgsWmsLegendUrlPr QgsDebugMsg( QStringLiteral( "exiting." ) ); } +void QgsWmsCapabilities::parseMetadataUrl( QDomElement const &e, QgsWmsMetadataUrlProperty &metadataUrlProperty ) +{ + + QDomNode n1 = e.firstChild(); + while ( !n1.isNull() ) + { + QDomElement e1 = n1.toElement(); // try to convert the node to an element. + if ( !e1.isNull() ) + { + QString tagName = e1.tagName(); + if ( tagName.startsWith( QLatin1String( "wms:" ) ) ) + tagName = tagName.mid( 4 ); + + if ( tagName == QLatin1String( "Format" ) ) + { + metadataUrlProperty.format = e1.text(); + } + else if ( tagName == QLatin1String( "OnlineResource" ) ) + { + parseOnlineResource( e1, metadataUrlProperty.onlineResource ); + } + } + n1 = n1.nextSibling(); + } + + QgsDebugMsg( QStringLiteral( "exiting." ) ); +} + void QgsWmsCapabilities::parseLayer( QDomElement const &e, QgsWmsLayerProperty &layerProperty, QgsWmsLayerProperty *parentProperty ) { @@ -972,7 +1000,8 @@ void QgsWmsCapabilities::parseLayer( QDomElement const &e, QgsWmsLayerProperty & } else if ( tagName == QLatin1String( "MetadataURL" ) ) { - // TODO + layerProperty.metadataUrl << QgsWmsMetadataUrlProperty(); + parseMetadataUrl( e1, layerProperty.metadataUrl.last() ); } else if ( tagName == QLatin1String( "DataURL" ) ) { diff --git a/src/providers/wms/qgswmscapabilities.h b/src/providers/wms/qgswmscapabilities.h index bcbaf29605f..47b12210402 100644 --- a/src/providers/wms/qgswmscapabilities.h +++ b/src/providers/wms/qgswmscapabilities.h @@ -692,6 +692,7 @@ class QgsWmsCapabilities void parseCapability( QDomElement const &e, QgsWmsCapabilityProperty &capabilityProperty ); void parseRequest( QDomElement const &e, QgsWmsRequestProperty &requestProperty ); void parseLegendUrl( QDomElement const &e, QgsWmsLegendUrlProperty &legendUrlProperty ); + void parseMetadataUrl( QDomElement const &e, QgsWmsMetadataUrlProperty &metadataUrlProperty ); void parseLayer( QDomElement const &e, QgsWmsLayerProperty &layerProperty, QgsWmsLayerProperty *parentProperty = nullptr ); void parseStyle( QDomElement const &e, QgsWmsStyleProperty &styleProperty ); diff --git a/src/providers/wms/qgswmsprovider.cpp b/src/providers/wms/qgswmsprovider.cpp index fe536e6e6c8..a7e50396cd8 100644 --- a/src/providers/wms/qgswmsprovider.cpp +++ b/src/providers/wms/qgswmsprovider.cpp @@ -1751,24 +1751,6 @@ QString QgsWmsProvider::layerMetadata( QgsWmsLayerProperty &layer ) QStringLiteral( "</td>" "<td>" ) % layer.title; - - // Metadata URLs - if ( !layer.metadataUrl.isEmpty() ) - { - metadata += QStringLiteral("</td></tr>" ); - metadata += QStringLiteral( "<tr><th>" ) % - tr( "MetadataURLs" ) % - QStringLiteral( "</th>" - "<td><table class=\"tabular-view\">" - "<tr><th>Format</th><th>URL</th></tr>" ); - for ( int k = 0; k < layer.metadataUrl.size(); k++ ) - { - const QgsWmsMetadataUrlProperty &l = layer.metadataUrl[k]; - metadata += QStringLiteral( "<tr><td>" ) % l.format % QStringLiteral( "</td><td>" ) % l.onlineResource.xlinkHref % QStringLiteral( "</td></tr>" ); - } - metadata += QStringLiteral( "</table>" ); - } - QStringLiteral( "</td></tr>" // Layer Abstract @@ -1827,6 +1809,23 @@ QString QgsWmsProvider::layerMetadata( QgsWmsLayerProperty &layer ) QString::number( layer.fixedHeight ) % QStringLiteral( "</td></tr>" ); + // Metadata URLs + if ( !layer.metadataUrl.isEmpty() ) + { + metadata += QStringLiteral( "<tr><th>" ) % + tr( "MetadataURLs" ) % + QStringLiteral( "</th>" + "<td><table class=\"tabular-view\">" + "<tr><th>Format</th><th>URL</th></tr>" ); + for ( int k = 0; k < layer.metadataUrl.size(); k++ ) + { + const QgsWmsMetadataUrlProperty &l = layer.metadataUrl[k]; + metadata += QStringLiteral( "<tr><td>" ) % l.format % QStringLiteral( "</td><td>" ) % l.onlineResource.xlinkHref % QStringLiteral( "</td></tr>" ); + } + metadata += QStringLiteral( "</table>" + "</td></tr>" ); + } + // Layer Coordinate Reference Systems for ( int j = 0; j < std::min( layer.crs.size(), 10 ); j++ ) {