2015-07-02 2 views
5

vorrei leggere un documento XML utilizzando il seguente codice:lettura di un documento XML con LINQ

XDocument xdoc = XDocument.Load(fileName); 

Questo non funziona, e la seguente eccezione viene generata (liberamente tradotto da me):

System.Xml.XmlException: 'xlink' is a non declared prefix.

Ecco la linea di XML l'eccezione si riferisce a:

<use xlink:href="#lend13" transform="scale(-8.5,-8.5) "/> 

Come posso modificare il codice di carico, in modo da th nel documento XML verrà letto correttamente? Devo impostare in anticipo gli spazi dei nomi? Come?

+0

Se il file XML non ha una dichiarazione dello spazio dei nomi ('xmlns: = XLink ".."') sia in 'dell'uso al o uno dei suoi antenati, allora non avere XML valido . –

+1

Puoi pubblicare il tuo XML completo (se non è troppo lungo)? –

risposta

2

se è possibile modificare l'XML, è possibile correggere definendo lo spazio dei nomi per esso

<use xlink:href="#lend13" transform="scale(-8.5,-8.5) 
xmlns:xlink="http://myurl.com/" /> 

altrimenti si può predefinire lo spazio dei nomi quando si utilizza XmlDocument

XmlDocument.DocumentElement.SetAttribute("xmlns:xlink", "http://myurl.com/"); 

e in LINQ to XML può definire l'attributo utilizzando XNamesace

XNamespace ns = "http://myurl.com/"; 
+0

La modifica dell'XML non è un'opzione, poiché i file XML sono generati da uno strumento di terze parti. – Boris

+0

Cosa devo fare esattamente con l'oggetto XNamespace? – Boris

+0

Stavo per dire che li usi durante l'interrogazione, ora che guardo il link di @ Saveendra, quel post del blog è esattamente quello che cerchi. Non c'è bisogno che io lo riproduca. Voto la sua risposta – n00b

3
+0

Ok, mi sto avvicinando. Ho fatto come suggerito il collegamento. Ma questo porta a un'altra eccezione (una WebExcpetion!?! ??!): Un'eccezione non gestita di tipo 'System.Net.WebException' si è verificata in System.Xml.dll Ulteriori informazioni: Il server remoto ha risposto con un errore: (407) Richiesto Proxyauthentifizierung. – Boris

+0

Questo problema si verifica con i server proxy che utilizzano l'autenticazione Challenge/Response (NTLM) di Microsoft Windows NT. Quando l'applicazione richiede l'accesso a siti Web esterni, il server proxy invia una "sfida", richiedendo le credenziali dell'utente che desidera questo accesso. Poiché il metodo di autenticazione del sito Web è anonimo, Internet Information Services (IIS) risponde con le credenziali dell'account anonimo (IUSR_MachineName). Per impostazione predefinita, IUSR_MachineName è un account locale noto solo al server IIS. Il server proxy rifiuta l'accesso perché non riconosce il nome. –

+0

Si prega di dare un'occhiata, c'è qualche risoluzione che hanno dato. Ho letto questo https://support.microsoft.com/en-us/kb/315909/en-us –