[英]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.