0

XMLドキュメントで自分のWebサイトの特定の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')]");

見つかったら、そのWebサイトノードと親ノードを返す結果が必要です。

<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

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();

URLの代わりに使用する必要があるかもしれませんがwhere p.Attribute("id").Value == urlName、それを解決することができます!

要素全体が必要な場合は、次のように変更します。 select p.Parent).FirstOrDefault();

于 2013-03-26T13:59:12.833 に答える
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 に答える