0
我有什么应该是一个相当简单的要求。使用Linq读取XML节点值
我想使用LINQ到XML在VS2010项目得到如下节点值:
GPO->名称
GPO-> LinksTo-> SOMName
GPO-> LinksTo- > SOMPath
然后: 如果GPO->用户 - > ExtensionDataCount节点存在,我想回到所有子节点的数量
同样: 如果GPO->计算机> 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,然后试图用拉名称值:
XDoc.Elements("Name").FirstOrDefault.Value
XDoc.Descendants("Name").First().Value
但我发现了错误:未将对象引用设置到对象的实例,然后:序列不包含任何元素。
我猜我可能有错误的道路,但我认为后人并不需要精确的路径..
我要去哪里错了?
谢谢!以前没有遇到过XNamespace。 – Ben 2012-02-28 05:03:15