按名称查找兄弟节点

时间:2012-07-12 15:16:07

标签: xml visual-studio-2010 visual-studio-2008 iis iis-7

我正在阅读IIS的applicationHost.xml.config文件。我正在获取站点中每个站点的虚拟目录,然后从该点获取我需要的信息。物理路径和路径等信息。 然后我需要获得Bindings。

当我有两个应用程序节点时,我无法弄清楚如何有效地进入“Bindings”元素节点。 (下面显示了一个示例)但是,我可以使用“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>

1 个答案:

答案 0 :(得分:0)

我希望我在这里没有遗漏一些东西,但你不能像你这样在迭代的XmlNode上使用SelectNodes:

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

这应该从迭代节点的根(它是virtualDirectory节点)到其父节点(它是一个应用程序节点)到它的父节点(它是站点节点)到绑定节点,最后到达这个中的绑定节点列表?