簡體   English   中英

使用C#將html轉換為XSLT

[英]html to XSLT conversion using C#

我正在嘗試使用C#將html頁面更改為xslt頁面,例如,如果我有類似的東西

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

我必須將其轉換為

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

我有一個xsl文件,其中包含所有這些值。 我不想在這里替換這些值,因為在替換原始值之前將對其進行進一步處理。 我在這里面臨的問題是,如果值在標簽的屬性級別或標簽的值級別中,我將很難識別(替換xml構造)。

我正在嘗試使用正則表達式。 有人可以幫忙嗎?

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

    }

我不知道有什么組件可以讓您全部使用XSLT,但是HTML Agility Pack對於任何形式的HTML操作來說都是很棒的。 解析器將提供一個完整的對象樹,其中包含明確定義的屬性,標簽,樣式等,並且可以使用XSLT輕松查詢。

另外,要獲得有關使用regex解析HTML的良好討論,請參閱此文章的第一個答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM