2012-04-13 59 views
0

由于某种原因,我今天早上有一个巨大的脑部放屁。XDocument阅读MetaBase.xml

我无法从下面的代码得到任何东西......它总是弹出0,并且永远不会填充_Qry,即使_MBXml正确填写(调试过程中盘旋显示它)

_MetaBasePath += "IIS6-MetaBase.xml" '"metabase.xml" 
_MBXml = XDocument.Load(_MetaBasePath, LoadOptions.PreserveWhitespace) 
_Qry = (From n In _MBXml.<IIsWebServer> 
     Select New Typing.MetaBase() With { 
      .Binding = Common.IsNull(Of String)([email protected], String.Empty) 
     }).ToList() 
MsgBox(_Qry.Count) 

这里是一个例如IIS 6 Metabase.xml文件的...

<?xml version ="1.0"?> 
<configuration xmlns="urn:microsoft-catalog:XML_Metabase_V64_0"> 
<IIsWebServer Location ="/LM/W3SVC/1174460368" 
    AuthFlags="0" 
    SSLCertHash="8251cc2a9671150ac107aee3d78006b032f9bc36" 
    SSLStoreName="MY" 
    SecureBindings="184.106.185.111:443:" 
    ServerAutoStart="TRUE" 
    ServerBindings="184.106.185.111:80:beta.turbokits.com" 
    ServerComment="TurboKits Beta" 
> 
</IIsWebServer> 
</configurarion> 
+0

也尝试过... 和.Elements(“IIsWebServer”) – Kevin 2012-04-13 14:46:09

回答

1

如果Metabase.xml中有一个默认的命名空间声明(即xmlns="http://example.com/"),那么请确保您的VB代码有

Imports <xmlns="http://example.com"> 

在导入部分。当然,您需要确保将http://example.com/修改为XML文档中使用的实际URL。

如果您仍有问题,请向我们展示一个XML示例。

+0

editted问题的例子。 – Kevin 2012-04-13 16:09:26

+0

其实......看起来可能已经做到了:'code'Imports Kevin 2012-04-13 16:13:45

+0

是的,XML输入中的默认名称空间声明适用于根元素及其后代元素和VB.NET来处理'Imports'是正确的方法。作为另一种选择,如果你不想依赖于VB.NET编译器,你可以使用Dim df As XNamespace = _MBXml.Root.Name.Namespace,然后使用例如'Elements'或'Descendants'等查询方法。 '_MBXml.Elements(df +“IIsWebServer”)'。 – 2012-04-13 16:20:24