преобразование HTML в XSLT с использованием C # - PullRequest
0 голосов
/ 06 января 2012

Я пытаюсь изменить html-страницу на страницу xslt, используя C #, например, если у меня есть что-то вроде

<a href="#compantnameURL#">#companyname#</a>

, я должен преобразовать его в

<a href="{test/companynameURL}"><xsl:value-of select="test/companyname" /></a>

Iесть файл xsl, который имеет все эти значения.Я не хочу заменять значения здесь, поскольку они подлежат дальнейшей обработке перед заменой исходных значений.Проблема, с которой я здесь сталкиваюсь, заключается в том, что у меня возникла проблема с определением (для замены конструкции xml), если значение находится на уровне атрибута тега или на уровне значения тега.

Я пытаюсь использоватьрегулярные выражения на нем.Может кто-нибудь помочь ??

Ответы [ 2 ]

1 голос
/ 07 января 2012

Html Agility Pack - это то, что нужно. Не забудьте добавить ссылку на него. Этот код иллюстрирует один из способов использования HTML Agility Pack для создания XSLT, что, я думаю, вы хотите сделать.

    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(@"<html>" + 
        "<a href='#compantnameURL1#'>#companyname1#</a>" +
        "<a href='#compantnameURL2#'>#companyname2#</a>" +
        "</html>");

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.IndentChars = ("    ");
    settings.Encoding = Encoding.UTF8;

    using (XmlWriter writer = XmlWriter.Create(Console.Out, settings))
    {                                
        writer.WriteStartDocument();
        writer.WriteStartElement("xsl", "stylesheet", "http://www.w3.org/1999/XSL/Transform");
        writer.WriteStartElement("template", "http://www.w3.org/1999/XSL/Transform");
        writer.WriteAttributeString("match", "/");
        writer.WriteElementString("apply-templates", "http://www.w3.org/1999/XSL/Transform", "");
        writer.WriteEndElement();
        writer.WriteStartElement("template", "http://www.w3.org/1999/XSL/Transform");
        writer.WriteAttributeString("match", "test/");
        foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a"))
        {
            HtmlAttribute att = link.Attributes["href"];
            writer.WriteStartElement("a");
                writer.WriteStartElement("attribute", "http://www.w3.org/1999/XSL/Transform");
                    writer.WriteStartElement("value-of", "http://www.w3.org/1999/XSL/Transform");
                        writer.WriteAttributeString("select", att.Value);
                    writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteStartElement("value-of", "http://www.w3.org/1999/XSL/Transform");
                    writer.WriteAttributeString("select", link.InnerText);
                writer.WriteEndElement();
            writer.WriteEndElement();
        }
        writer.WriteEndElement();
        writer.WriteEndDocument();

    }
0 голосов
/ 06 января 2012

Мне неизвестен компонент, который доставит вас всех в XSLT, но HTML Agility Pack - замечательно для любого вида манипуляций с HTML. Синтаксический анализатор предоставит полное дерево объектов с четко определенными атрибутами, тегами, стилями и т. Д., И его легко запрашивать с помощью XSLT.

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

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