0

我需要在 XML 文档中搜索我网站的特定 url 名称。

这样当用户浏览我的网站时,他们所在的任何页面都会决定侧边菜单的外观。到目前为止,这是我的代码:

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>
4

2 回答 2

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;
            }
        }
于 2013-03-28T14:53:22.413 回答
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而不是 url,但您可以解决这个问题!

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

于 2013-03-26T13:59:12.833 回答