Обход HTML-элементов ASP.NET с использованием LINQ - PullRequest
0 голосов
/ 16 июля 2010

Предполагается, что у меня есть следующий HTML-код ASP.NET:

<html>
    <head><title>Test Page</title></head>
    <body id="bodyID">
        <asp:Label runat="server" id="lbl1" text="First Name:" />
        <asp:TextBox runat="server" id="txt1" /><br />
        <asp:Label runat="server" id="lbl2" text="Last Name:" />
        <asp:TextBox runat="server" id="txt2"></asp:TextBox>
    </body>
</html>

Я пытаюсь написать запрос linq, который будет извлекать все идентификаторы из любого тега asp. Кроме того, запрос должен сгруппировать все по алфавиту. Таким образом, для приведенного выше примера запрос linq должен вернуть «lbl1», затем «lbl2», затем «txt1» и, наконец, «txt2». Обратите внимание, что он не захватил «bodyID», потому что он не является частью тега ASP.NET. Есть простой способ сделать это? Кстати, я использую C #.

Ответы [ 3 ]

1 голос
/ 16 июля 2010

Если вы хотите использовать Linq To XML, вам придется работать с тегами <asp:>, чтобы они не загружались корректно в XML.

Этот код даст вам то, что выищите, предполагая:

  • вы можете загрузить разметку ASPX в строку
  • допустимая разметка ASPX XML.

Заменаasp: с asp- может вызвать проблемы, если у вас есть действительный контент asp:, который не находится в теге.Это можно почистить, чтобы оно соответствовало вашим потребностям.

  public static void Main(string[] args)
    {
        string aspxCode = @"<html><head><title>Test Page</title></head>
                            <body id=""bodyID"">        
        <asp:Label runat=""server"" id=""lbl1"" text=""First Name:"" />
        <asp:TextBox runat=""server"" id=""txt1"" /><br />
        <asp:Label runat=""server"" id=""lbl2"" text=""Last Name:"" />
        <asp:TextBox runat=""server"" id=""txt2""></asp:TextBox>
    </body>
</html>";

        XElement xDoc = XElement.Parse(aspxCode.Replace("asp:", "asp-"));

        var allMatchingASPtags = xDoc.Descendants()
               .Where(d => d.Name.LocalName.StartsWith("asp-"))
               .Select(c => c.Attribute("id").Value);

        foreach (var t in allMatchingASPtags)
        {
            Console.WriteLine(t);
        }

        Console.ReadLine();
0 голосов
/ 16 июля 2010

Возможно, вы сможете его проанализировать.

Создайте временный файл, добавьте заголовок для любого типа анализатора, который вы хотите использовать.

Добавьте код html / asp во временный файли закройте его.

Выполните синтаксический анализ файла с помощью вашей любимой библиотеки синтаксического анализа.

Прокрутите узлы ASP, добавив их в список.

Сортируйте список.

Вы также можете сделать это с помощью регулярных выражений.

0 голосов
/ 16 июля 2010

Самый простой способ сделать это - написать регулярное выражение для извлечения всех идентификаторов и затем отсортировать список. поскольку каждый элемент начинается с <asp:, это должно быть довольно легко сделать. Если бы у меня было немного больше времени, я бы разработал регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...