Linq to XML:查找特定元素的值

发布于 2024-11-09 09:19:13 字数 1125 浏览 0 评论 0原文

我是“Linq”和“Linq to XML”概念的新手。我有以下 xml 树,

<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
<name>IWS</name>
<SSIDConfig>
  <SSID>
    <hex>496153</hex>
    <name>ISL</name>
  </SSID>
</SSIDConfig>
<connectionType>ESS</connectionType>
<MSM>
  <security>
    <authEncryption>
      <authentication>WPA2PSK</authentication>
      <encryption>AES</encryption>
      <useOneX>false</useOneX>
    </authEncryption>
    <sharedKey>
      <keyType>networkKey</keyType>
      <protected>false</protected>  
      <keyMaterial>BFEBBEA9B0E78ECD671A8D35D96556A32E001B7524A1</keyMaterial>
   </sharedKey>
 </security>
</MSM>
</WLANProfile>

我想知道如何使用 linq to xml 检索 KeyMaterial 元素值?

我尝试使用以下代码,但我得到空枚举

var networkKey = from c in doc.Descendants("WLANProfile")
                 select (string)c.Element("keyMaterial").Value;

有什么建议吗?

I am new bee to "Linq" and "Linq to XML" concepts. I have the following xml tree

<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
<name>IWS</name>
<SSIDConfig>
  <SSID>
    <hex>496153</hex>
    <name>ISL</name>
  </SSID>
</SSIDConfig>
<connectionType>ESS</connectionType>
<MSM>
  <security>
    <authEncryption>
      <authentication>WPA2PSK</authentication>
      <encryption>AES</encryption>
      <useOneX>false</useOneX>
    </authEncryption>
    <sharedKey>
      <keyType>networkKey</keyType>
      <protected>false</protected>  
      <keyMaterial>BFEBBEA9B0E78ECD671A8D35D96556A32E001B7524A1</keyMaterial>
   </sharedKey>
 </security>
</MSM>
</WLANProfile>

I was wondering how to retrieve the KeyMaterial element value using linq to xml?

I have tried to use the following code, but I get empty enumeration

var networkKey = from c in doc.Descendants("WLANProfile")
                 select (string)c.Element("keyMaterial").Value;

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

妖妓 2024-11-16 09:19:13

两个错误:

1.) keyMaterial 不是 WLANProfile 的直接子级,这就是为什么您没有得到任何结果(c.Elements 只会查找直接子级)

2 .) 您需要在 XML 中使用指定的命名空间 - 否则没有节点会匹配

两者都应用:

XNamespace xns = "http://www.microsoft.com/networking/WLAN/profile/v1";
var networkKey = (from c in doc.Descendants(xns + "keyMaterial")
                  select (string)c.Value).FirstOrDefault();

如果您知道总是只有一个键,则点表示法会稍微短一些:

string networkKey = xdoc.Descendants(xns + "keyMaterial").Single().Value;

Two mistakes:

1.) keyMaterial is not a direct child of WLANProfile that's why you don't get any results (c.Elements will only look for a direct child)

2.) you need to use the specified namespace in the XML - otherwise no node will match

Both applied:

XNamespace xns = "http://www.microsoft.com/networking/WLAN/profile/v1";
var networkKey = (from c in doc.Descendants(xns + "keyMaterial")
                  select (string)c.Value).FirstOrDefault();

Somewhat shorter in dot notation if you know there is always going to be exactly one key:

string networkKey = xdoc.Descendants(xns + "keyMaterial").Single().Value;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文