在XML文档中查找URL名称

时间:2013-03-26 13:51:25

标签: c# html xml

我需要在XMLdocument中搜索我网站的特定网址名称。

这样,当用户浏览我的网站时,无论他们在哪个页面上,都会指示侧边菜单的样子。到目前为止,这是我的代码:

var urlName = Path.GetFileNameWithoutExtension(Request.Url.AbsolutePath);

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(Server.MapPath("~/App_Data/menu.xml"));
xmlDocument.SelectNodes("//*[contains(text(), 'urlName')]");

一旦找到,我希望结果返回该网站节点和父节点。

<menu type="personal">
  <L1 shortName="Something here" id="/personal/something-here.aspx" url="../personal/something-here.aspx" regions="123">
    <L2 shortName="anything here" id="/personal/anything-here.aspx" url="../personal/anything-here.aspx" regions="123">
      <L3 shortName="everything here" id="/personal/everything-here.aspx" url="../personal/everything-here.aspx" regions="123"/>
    </L2>
    <L2 shortName="something" id="/personal/something.aspx" url="../personal/something.aspx" regions="123">
      <L3 shortName="anything" id="/personal/anything.aspx" url="../personal/anything.aspx" regions="123" />
      <L3 shortName="everything" id="/personal/everything.aspx" url="../personal/everything.aspx" regions="123" />
    </L2>
  </L1>
</menu>

2 个答案:

答案 0 :(得分:0)

我会使用Linq。这将检索父级的元素名称。

    var urlName = Path.GetFileNameWithoutExtension(Request.Url.AbsolutePath);

    XDocument xDocument = XDocument.Load(Server.MapPath("~/App_Data/menu.xml"));
    var url = (from p in doc.Descendants().Elements()
               where p.Attribute("url").Value == urlName 
               select p.Parent.Name.LocalName).FirstOrDefault();

您可能需要使用where p.Attribute("id").Value == urlName而不是网址,但您可以解决这个问题!

如果您想要整个元素,请更改为select p.Parent).FirstOrDefault();

答案 1 :(得分:0)

感谢所有帮助过的人,但我找到了另一种完美的方式。再次感谢。

        XmlDocument xmlDocument = new XmlDocument();

        xmlDocument.Load(Server.MapPath("~/App_Data/menu.xml"));

        XmlNodeList levelOneElements = xmlDocument.SelectNodes("root/menu[contains(@type,'" + Title.Text.ToLower() +  "')]/L1");

        for (int i = 0; i < levelOneElements.Count; i++)
        {
            XmlNode levelOne = levelOneElements.Item(i);
            if (levelOne.OuterXml.Contains(_menu))
            {
                _index = i;
                break;
            }
        }