使用Linq读取名称空间中的XML节点
问题描述:
如何计算扩展节点的名称空间声明的内容?使用Linq读取名称空间中的XML节点
我想回到所有的子节点下:GPO->用户 - > ExtensionData->扩展
<?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">
<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>
这是我的尝试:
Dim NS As XNamespace = "http://www.microsoft.com/GroupPolicy/Settings/Scripts"
Dim UserPolCount = XDoc.Descendants(NS + "Extension").First()
我得到以下错误:序列不包含任何元素
此外,我提供的XML示例只是一个小片段,ExtensionData-> Extension节点可以嵌套在不同的区域,所以我希望能找到方法指定完整路径。
谢谢
答
的Extension
元素仍然是根命名空间下:Extension
下
http://www.microsoft.com/GroupPolicy/Settings
元素是脚本命名空间下:
http://www.microsoft.com/GroupPolicy/Settings/Scripts
因此,你需要:
Dim NS As XNamespace = "http://www.microsoft.com/GroupPolicy/Settings/"
Dim NS1 As XNamespace = "http://www.microsoft.com/GroupPolicy/Settings/Scipts"
Dim UserPolCount = XDoc.Descendants(NS + "Extension").First()
Dim ScriptNode = UserPolCount.Elements(NS1 + "Script")
编辑从评论:
Dim extension =
XDoc
.Root
.Element(NS + "User")
.Element(NS + "ExtensionData")
.Element(NS + "Extension");
答
您正在使用错误的命名空间。您需要使用http://www.microsoft.com/GroupPolicy/Settings
作为命名空间。
原因是只有Extension
的孩子在Scripts
命名空间中。你可以很容易地看到:孩子们的前缀都是q1
,Extension
本身不是。因此它在默认命名空间中定义,由根标签GPO
上的属性xmlns="http://www.microsoft.com/GroupPolicy/Settings"
定义。
+0
感谢您的信息,我会给它一个去。 – Ben 2012-02-28 10:52:30
谢谢你的例子。你能告诉我,我怎么指定路径:GPO->用户 - >扩展数据 - >扩展,同样GPO->计算机 - >扩展数据 - >扩展 – Ben 2012-02-28 10:53:33
更新答案。 – DaveShaw 2012-02-28 11:27:52