Lettura di un XML con il xmlns

di il
6 risposte

Lettura di un XML con il xmlns

Ciao a tutti,
devo analizzare un file XML ma mi trovo a litigare con il parametro "xmlns"

Eccovi qui il file:
<?xml version="1.0"?>
<GetMatchingProductForIdResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
	<GetMatchingProductForIdResult Id="7321958033456" IdType="EAN" status="Success">
		<Products xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd">
			<Product>
				<Identifiers>
					<MarketplaceASIN>
						<MarketplaceId>APJ6JRA9NG5V4</MarketplaceId>
						<ASIN>B0016GM816</ASIN>
					</MarketplaceASIN>
				</Identifiers>
				<AttributeSets>
					<ns2:ItemAttributes xml:lang="it-IT">
						<ns2:AspectRatio>1.85:1</ns2:AspectRatio>
						<ns2:Binding>DVD</ns2:Binding>
						<ns2:Brand>Warner Home Video</ns2:Brand>
						<ns2:Creator Role="Attore">Giuseppe Battiston</ns2:Creator>
						<ns2:Creator Role="Regista">Silvio Soldini</ns2:Creator>
						<ns2:Format>DVD</ns2:Format>
						<ns2:ListPrice>
							<ns2:Amount>15.25</ns2:Amount>
							<ns2:CurrencyCode>EUR</ns2:CurrencyCode>
						</ns2:ListPrice>
						<ns2:ProductGroup>DVD</ns2:ProductGroup>
						<ns2:PublicationDate>2012-01-01</ns2:PublicationDate>
						<ns2:Title>Giorni e nuvole</ns2:Title>
					</ns2:ItemAttributes>
				</AttributeSets>
			</Product>
		</Products>
	</GetMatchingProductForIdResult>
</GetMatchingProductForIdResponse>
Per poter leggere i dati devo fare così:
Dim xmlTxt = My.Computer.FileSystem.ReadAllText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\amazon.xml")

xmlTxt = xmlTxt.Replace(" xmlns=""http://mws.amazonservices.com/schema/Products/2011-10-01""", "")

Dim xmlDoc As New XmlDocument
xmlDoc.LoadXml(xmlTxt)

Dim product = xmlDoc.SelectSingleNode("/GetMatchingProductForIdResponse/GetMatchingProductForIdResult/Products/Product")
cioè devo togliere quel parametro xmlns, ma vorrei capire come fare senza doverlo togliere.

Poi ovviamente avrò il problema anche con il <ns2:.......> ma questo lo vedrò dopo

Grazie
Sergio

6 Risposte

  • Re: Lettura di un XML con il xmlns

    Se non setti a stringa vuota che errore ritorna?
  • Re: Lettura di un XML con il xmlns

    Non mi dà un errore, ma la variabile product è Nothing
  • Re: Lettura di un XML con il xmlns

    Ciao,
    i namespace servono per disambiguare eventuali elementi con lo stesso nome
    per cui non è saggio eliminarli ( anche se in questo caso ti funziona).

    Devi usare anche xmlNameSpaceManger
    https://docs.microsoft.com/it-it/dotnet/standard/data/xml/select-nodes-using-xpath-navigation

    HTH
  • Re: Lettura di un XML con il xmlns

    Si, lo so che è sbagliato eliminarli, ma altrimenti non so come fare, io chiedevo proprio come fare per lasciarli lì.

    ho provato ad aggiungere XmlNamespaceManager con questo codice
    Dim nameSpaceManager = New XmlNamespaceManager(xmlDoc.NameTable)
    nameSpaceManager.AddNamespace("", "http://mws.amazonservices.com/schema/Products/2011-10-01")
    
    ..... ma poi ?????
  • Re: Lettura di un XML con il xmlns

    ... ecco
    Occorre aggiungere un prefisso al namespace di default come nell'esempio del link
    
    nameSpaceManager.AddNamespace("m", "http://mws.amazonservices.com/schema/Products/2011-10-01")
    nameSpaceManager.AddNamespace("ns2", "http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd")
    
    Dim product = xmlDoc.SelectSingleNode("/m:GetMatchingProductForIdResponse/m:GetMatchingProductForIdResult/m:Products/m:Product", nameSpaceManager)
    Dim ItemAttributes = xmlDoc.SelectSingleNode("/m:GetMatchingProductForIdResponse/m:GetMatchingProductForIdResult/m:Products/m:Product/m:AttributeSets/ns2:ItemAttributes", nameSpaceManager)
    
  • Re: Lettura di un XML con il xmlns

    PERFETTO !!
    Funziona egregiamente, grazie mille, mi mancava quel "m" che hai messo
Devi accedere o registrarti per scrivere nel forum
6 risposte