使用Linq读取XML文档

5
我想使用以下代码读取XML文档:
XDocument xdoc = XDocument.Load(fileName);

这并不起作用,会抛出以下异常(由我自由翻译):

System.Xml.XmlException:'xlink'是一个未声明的前缀。

这是异常所指的XML行:

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

我该如何修改加载代码,以便成功读取XML文档?我需要预先设置命名空间吗?怎么做?


如果您的XML文件在“use”或其祖先中没有命名空间声明(xmlns:xlink =“..”),则您的XML无效。 - Charles Mager
1
你能否发布完整的XML(如果不是太长的话)? - Charles Mager
2个回答

4

好的,接近成功了。我已经按照链接建议的做法去做了。但是这导致了另一个异常(一个WebExcpetion!???):在System.Xml.dll中发生了未处理的类型为'System.Net.WebException'的异常。额外信息:远程服务器响应错误:(407) Proxyauthentifizierung required. - Boris
这个问题发生在使用Microsoft Windows NT Challenge/Response(NTLM)身份验证的代理服务器上。当应用程序请求访问外部网站时,代理服务器发送一个“挑战”,请求想要此访问权限的用户的凭据。由于Web站点的身份验证方法是匿名的,因此Internet信息服务(IIS)将回复匿名帐户(IUSR_MachineName)的凭据。默认情况下,IUSR_MachineName是只有IIS服务器知道的本地帐户。代理服务器拒绝访问,因为它无法识别这个名称。 - Saveendra Ekanayake
请看一下,他们提供了一些解决方案。我阅读了这篇文章:https://support.microsoft.com/en-us/kb/315909/en-us - Saveendra Ekanayake
唉,我一句话也不懂这是什么意思...我只想在本地读取一个XML文件,不需要任何网络或其他操作。 - Boris

2
如果您可以编辑XML,可以通过为其定义命名空间来修复问题。
<use xlink:href="#lend13" transform="scale(-8.5,-8.5) 
xmlns:xlink="http://myurl.com/" />

否则,您可以在使用XmlDocument时预定义命名空间。
XmlDocument.DocumentElement.SetAttribute("xmlns:xlink", "http://myurl.com/");

在 LINQ to XML 中,您可以使用 XNamesace 定义属性。

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

修改XML不是一个选项,因为XML文件是由第三方工具生成的。 - Boris
我应该如何处理XNamespace对象? - Boris
我本来想说在查询期间使用它们,但现在看了@Saveendra的链接,那篇博客文章正是你需要的。没必要让我重复一遍。我投赞成票支持他的回答。 - n00b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接