【问题标题】:xmlns attribute won't let me parse [duplicate]xmlns 属性不会让我解析 [重复]
【发布时间】:2015-09-14 01:44:48
【问题描述】:

过去一小时我一直在尝试解析这个 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;

【问题讨论】:

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


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2015-11-18
      • 1970-01-01
      相关资源
      最近更新 更多