【问题标题】:html to XSLT conversion using C#使用 C# 将 html 转换为 XSLT
【发布时间】:2012-01-06 17:10:33
【问题描述】:

我正在尝试使用 C# 将 html 页面更改为 xslt 页面, 例如,如果我有类似的东西

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

我必须把它转换成

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

我有一个包含所有这些值的 xsl 文件。我不想在这里替换这些值,因为它们要在替换原始值之前进行进一步处理。 我在这里面临的问题是我无法识别(替换 xml 构造)该值是在标记的属性级别还是在标记的值级别。

我正在尝试对其使用正则表达式。有人可以帮忙吗??

【问题讨论】:

    标签: c# html xml regex xslt


    【解决方案1】:

    HTML 敏捷包是要走的路。不要忘记添加对它的引用。此代码说明了使用 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();
    
        }
    

    【讨论】:

      【解决方案2】:

      我不知道有一个组件可以让大家都使用 XSLT,但是HTML Agility Pack 对于任何类型的 HTML 操作来说都是美妙的。解析器将提供一个完整的对象树,其中包含明确定义的属性、标签、样式等,并且可以使用 XSLT 轻松查询。

      另外,有关使用正则表达式解析 HTML 的详细讨论,请参阅this post 上的第一个答案。

      【讨论】:

        猜你喜欢
        • 2013-11-07
        • 2014-03-08
        • 2012-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 1970-01-01
        相关资源
        最近更新 更多