我需要在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>
答案 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;
}
}