繁体   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