xmlns属性不允许我解析

时间:2015-06-27 02:10:45

标签: c# xml visual-studio-2010 xml-parsing

我一直试图解析过去一小时的XML文件

<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>MEDO PUB</name>
    <SSIDConfig>
        <SSID>
            <hex>4D45444F20505542</hex>
            <name>MEDO PUB</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>manual</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>true</protected>
                <keyMaterial>someReallyLongString</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>

但我一直都有错误。这是保存的Wi-Fi配置文件,我使用Managed Wifi API导出XML文件。后来,我想解析并读取XML文件中的一些数据。我不能。在承认失败之后,我没有别的尝试,只能修改XML文件。所以我尝试解析

<?xml version="1.0"?>
<WLANProfile>
    <name>MEDO PUB</name>
</WLANProfile>

它有效。 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;

1 个答案:

答案 0 :(得分:1)

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;