2015-07-02 8 views
5

Ich möchte ein XML-Dokument mit dem folgenden Code lesen:Lesen eines XML-Dokuments mit Linq

XDocument xdoc = XDocument.Load(fileName); 

Das funktioniert nicht, und die folgende Ausnahme ausgelöst wird (frei von mir übersetzt):

Hier

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

ist die XML-Linie die Ausnahme bezieht sich auf:

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

Wie kann ich den Lade Code ändern, so th am XML-Dokument wird erfolgreich gelesen? Muss ich Namespaces vorher einrichten? Wie?

+0

Wenn Ihre XML-Datei kein Namespace-Deklaration hat ('xmlns: xlink = ".."') in entweder 'use' oder einer seiner Vorfahren, dann haben Sie keine gültige XML . –

+1

Können Sie Ihren vollständigen XML-Code posten (wenn er nicht zu lang ist)? –

Antwort

2

wenn Sie die XML bearbeiten können Sie durch die Definition des Namespace für das Problem beheben kann

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

sonst können Sie den Namespace vordefinieren, wenn XmlDocument mit

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

und in Linq in XML können definiere das Attribut mit Hilfe von XNamesace

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

Das Ändern des XML ist keine Option, da die XML-Dateien von einem Drittanbieter-Tool generiert werden. – Boris

+0

Was genau soll ich mit dem XNamespace-Objekt machen? – Boris

+0

Ich wollte gerade sagen, dass Sie sie während der Abfrage verwenden. Jetzt, da ich auf den Link von @ Saveendra schaue, ist dieser Blogeintrag genau das, wonach Sie suchen. Ich brauche das nicht zu reproduzieren. Ich wähle seine Antwort – n00b

3

Ich denke, das wird hilfreich sein, es hat für mich funktioniert ...

http://aspnetgotyou.blogspot.com/2010/06/xdocument-or-xelement-with-xmlnamespace.html

+0

Okay, kommt näher. Ich habe getan, wie der Link vorgeschlagen hat. Aber das führt zu einer anderen Ausnahme (ein WebException!?! ??!): Eine nicht behandelte Ausnahme vom Typ 'System.Net.WebException' aufgetreten in System.Xml.dll Weitere Informationen: Der Remote-Server reagierte mit einem Fehler: (407) Proxyauthentifizierung erforderlich. – Boris

+0

Dieses Problem tritt bei Proxy-Servern auf, die Microsoft Windows NT-Herausforderung/Rückmeldung (NTLM) Authentifizierung verwenden. Wenn die Anwendung Zugriff auf externe Websites anfordert, sendet der Proxyserver eine "Abfrage" und fordert die Anmeldeinformationen des Benutzers an, der diesen Zugriff wünscht. Da die Authentifizierungsmethode der Website Anonym ist, antwortet Internetinformationsdienst mit den Anmeldeinformationen des anonymen Kontos (IUSR_MachineName). Standardmäßig ist IUSR_MachineName ein lokales Konto, das nur dem IIS-Server bekannt ist. Der Proxyserver verweigert den Zugriff, da er den Namen nicht erkennt. –

+0

Bitte schauen Sie, es gibt eine Auflösung, die sie gegeben haben. Ich lese das https://support.microsoft.com/en-us/kb/315909/en-us –