2012-07-12 90 views
1

我正在閱讀IIS的applicationHost.xml.config文件。我正在獲取站點中每個站點的虛擬目錄,然後從那裏獲取我需要的信息。信息如物理路徑和路徑。 然後我需要獲取綁定。按名稱查找同級節點

當我有兩個應用程序節點時,我無法弄清楚如何有效地進入「綁定」元素節點。 (下面顯示了一個例子)但是,我可以使用「site.ParentNode.NextSibling.ChildNodes」,如果有一個應用程序節點,它可以讓我得到相應綁定的列表。

在此先感謝您的幫助!

我的代碼:

XDocument.Load(@"C:\\windows\\system32\\inetsrv\\config\\applicationHost.config"); 
XmlNodeList siteList = XDocument.SelectNodes("/configuration/system.applicationHost/sites/site/application/virtualDirectory"); 

foreach (XmlNode site in siteList) 
{ 
    XmlAttribute XmlAttributeParentParentName = (XmlAttribute)site.ParentNode.ParentNode.Attributes.GetNamedItem("name"); 
    XmlAttribute XmlAttributePath = (XmlAttribute)site.Attributes.GetNamedItem("path"); 
    XmlAttribute XmlAttributePhysicalPath = (XmlAttribute)site.Attributes.GetNamedItem("physicalPath"); 
    XmlNodeList BindingList = (XmlNodeList)site.ParentNode.NextSibling.ChildNodes; 

    string path = XmlAttributePath.Value.ToString(); 
    string siteName = XmlAttributeParentParentName.Value.ToString(); 
    string physicalPath = XmlAttributePhysicalPath.Value.ToString(); 
    string firstBindingElement = BindingList[0].Attributes.GetNamedItem("bindingInformation").Value.ToString(); 

    //do something with the variables. 
    //rest of code is here 
} 

這裏是一個站點節點的例子:

<site name="Site Name" id="20" serverAutoStart="true"> 
    <application path="/" applicationPool="SiteAppPool"> 
     <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot\SiteName" /> 
    </application> 
    <application path="/store" applicationPool="SiteAppPool"> 
     <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot\SiteName\store" /> 
    </application> 
    <bindings> 
     <binding protocol="http" bindingInformation="*:80:sitename.com" /> 
    </bindings> 
</site> 

回答

0

我希望我沒有在這裏失去了一些東西,但不能使用在迭代的XmlNode上選擇節點,如下所示:

XmlNodeList BindingList = (XmlNodeList)site.SelectNodes("../../bindings/binding"); 

這應該從您的迭代節點(它是virtualDirectory節點)的根到它的父節點(它是一個應用程序節點)到它的父節點(它是節點節點),直到綁定節點,最後到一個列表綁定節點在這個?