xmlns 属性不允许我解析。
xmlns 属性不允许我解析。
我已经尝试解析这个XML文件已经一个小时了,但是一直出错。这是一个保存的Wi-Fi配置文件,我使用Managed Wifi API导出了这个XML文件。后来,我想解析和读取一些XML文件中的数据,但是无法实现。在承认失败后,我别无选择,只能修改XML文件。所以我尝试解析以下XML文件,并且成功了。
问题出在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;
在上述内容中,出现了一个关于"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文件了。