【问题标题】:Read an XML node value using Linq使用 Linq 读取 XML 节点值
【发布时间】:2012-02-28 12:36:07
【问题描述】:

我有一个相当简单的要求。

我想在VS2010项目中使用LINQ to XML来获取以下节点值:

GPO->名称

GPO->LinksTo->SOMName

GPO->LinksTo->SOMPath

然后: 如果 GPO->User->ExtensionDataCount 节点存在,我想返回所有子节点的计数

同样: 如果 GPO->Computer->ExtensionData 存在,则返回所有子节点的计数

这里是 XML,熟悉组策略导出的人应该已经看过了:

<?xml version="1.0" encoding="utf-16"?>
<GPO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.microsoft.com/GroupPolicy/Settings">
  <Identifier>
    <Domain xmlns="http://www.microsoft.com/GroupPolicy/Types">our.domain.fqdn</Domain>
  </Identifier>
  <Name>The Name I want to get</Name>
  <Computer>
    <VersionDirectory>1</VersionDirectory>
    <VersionSysvol>1</VersionSysvol>
    <Enabled>true</Enabled>
  </Computer>
  <User>
    <VersionDirectory>4</VersionDirectory>
    <VersionSysvol>4</VersionSysvol>
    <Enabled>true</Enabled>
    <ExtensionData>
      <Extension xmlns:q1="http://www.microsoft.com/GroupPolicy/Settings/Scripts" xsi:type="q1:Scripts">
        <q1:Script>
          <q1:Command>Logon.cmd</q1:Command>
          <q1:Type>Logon</q1:Type>
          <q1:Order>0</q1:Order>
          <q1:RunOrder>PSNotConfigured</q1:RunOrder>
        </q1:Script>
      </Extension>
      <Name>Scripts</Name>
    </ExtensionData>
  </User>
  <LinksTo>
    <SOMName>an interesting data value</SOMName>
    <SOMPath>some data value</SOMPath>
    <Enabled>true</Enabled>
    <NoOverride>false</NoOverride>
  </LinksTo>
</GPO>

我已将 XML 文件加载到 XDocument 中,然后尝试使用以下方法提取 Name 值:

XDoc.Elements("Name").FirstOrDefault.Value
XDoc.Descendants("Name").First().Value

但我收到错误:对象引用未设置为对象的实例,然后:序列不包含任何元素。

我猜我可能走错了路,但我认为 Descendants 不需要确切的路径..

我哪里错了?

【问题讨论】:

    标签: linq


    【解决方案1】:

    你必须使用声明的命名空间:

    XNamespace ns = "http://www.microsoft.com/GroupPolicy/Settings";
    var firstName = xdoc.Descendants(ns + "Name").First().Value;
    

    【讨论】:

    • 谢谢!以前没有遇到过 XNamespace。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多