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