xmlns 属性不允许我解析。

8 浏览
0 Comments

xmlns 属性不允许我解析。

我已经尝试解析这个XML文件已经一个小时了,但是一直出错。这是一个保存的Wi-Fi配置文件,我使用Managed Wifi API导出了这个XML文件。后来,我想解析和读取一些XML文件中的数据,但是无法实现。在承认失败后,我别无选择,只能修改XML文件。所以我尝试解析以下XML文件,并且成功了。

MEDO PUB

问题出在xmlns="http://www.microsoft.com/networking/WLAN/profile/v1"这一部分。为什么会这样呢?

由于我将会动态生成XML并且从中读取,所以无法手动打开并删除XML文件中的这一部分。我该如何解决这个问题?

使用:

Visual C# 2010 Express(非全套,单独安装)

Windows 8.1 Pro x64

XmlDocument doc = new XmlDocument();
doc.Load("c:/key.xml");
XmlNode node = doc.DocumentElement.SelectSingleNode("//WLANProfile/name");
XMLOutput.Text = node.InnerText;

0
0 Comments

在上述内容中,出现了一个关于"xmlns attribute won't let me parse"的问题。该问题的出现原因是在XML文件中使用了xmlns="...."这样的默认命名空间(未命名的命名空间声明)。需要注意的是,子元素会隐式继承祖先元素的默认命名空间,除非另有指定。换句话说,在这个特定的XML文件中,所有元素都处于默认命名空间中。

要使用XPath选择命名空间中的元素,首先需要注册指向相应命名空间的前缀,然后在XPath中正确使用注册的前缀:

XmlDocument doc = new XmlDocument();
doc.Load("c:/key.xml");
var nsManager = new XmlNamespaceManager(doc.NameTable);
nsManager.Add("d", "http://www.microsoft.com/networking/WLAN/profile/v1");
XmlNode node = doc.DocumentElement.SelectSingleNode("//d:WLANProfile/d:name", nsManager);
XMLOutput.Text = node.InnerText;

解决这个问题的方法是使用XmlNamespaceManager类来注册命名空间,并在XPath中使用注册的前缀。在上述代码中,使用nsManager.Add("d", "http://www.microsoft.com/networking/WLAN/profile/v1");将前缀"d"注册为"http://www.microsoft.com/networking/WLAN/profile/v1"命名空间,然后在XPath中使用//d:WLANProfile/d:name选择相应的元素。这样就可以正确解析带有命名空间的XML文件了。

0