2012-04-13 32 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