gpt4 book ai didi

c# - 使用 HtmlAgility 包转换 HTML

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:02 24 4
gpt4 key购买 nike

我在谷歌上搜索了将 HTML 转换为不同类型 HTML 的所有可能方法(我猜是 HTML 5)。我运气不好。我正在尝试转换此(RTF 编辑器的标记转换为 HTML)标记

<DIV STYLE="text-align:Left;font-family:Segoe UI;font-style:normal;font-weight:normal;font-size:12;color:#000000;">
<UL STYLE="margin:0 0 0 0;padding:0 0 0 0;">
<LI STYLE="margin:0 0 0 24;">
<P STYLE="font-family:Microsoft Sans Serif;font-weight:bold;font-size:11.333333333333332;margin:0 0 0 0;">
<SPAN>
<SPAN>open paint</SPAN>
</SPAN>
</P>
</LI>
<LI STYLE="margin:0 0 0 24;">
<P STYLE="font-family:Microsoft Sans Serif;font-weight:bold;font-size:11.333333333333332;margin:0 0 0 0;">
<SPAN>
<SPAN>open calc</SPAN>
</SPAN>
</P>
</LI>
</UL>
</DIV>

到(nicEditor 标记)

<UL>
<LI>
<STRONG>open paint</STRONG>

</LI>
<LI>
<STRONG>open calc</STRONG>
</LI>
</UL>

使用 HtmlAgilityPack。我正在尝试遍历 html 标记并手动替换为我想要的第二个标记。它有很多问题。我无法正确转换开始和结束标签并应用 css 之类的格式。我正在使用 rtf 编辑器中的 nicEditor

以下是我的 C# 代码,我试图用它来手动转换它。

private string transformHTML(string strTransform)
{
string final = "";
if (WebUtility.HtmlDecode(strTransform).StartsWith("<DIV") || WebUtility.HtmlDecode(strTransform).StartsWith("<HTML"))
{
HtmlAgilityPack.HtmlDocument resultat = new HtmlAgilityPack.HtmlDocument();
string source = WebUtility.HtmlDecode(strTransform);
resultat.LoadHtml(source);
string o = resultat.DocumentNode.OuterHtml;


List<string> startStringList = new List<string>();
List<string> lastStringList = new List<string>();
List<string> innerTextList = new List<string>();
List<string> newLine = new List<string>();
StringBuilder sb = new StringBuilder();
string innterText = "";
string child = "";



foreach (HtmlNode node in resultat.DocumentNode.Descendants())
{

switch (node.Name.ToLower())
{
case "ul":
startStringList.Add("<UL>");
lastStringList.Add("</UL>");
break;

case "li":
startStringList.Add("<LI>");
lastStringList.Add("</LI>");
break;

case "span":
if (!innerTextList.Contains(node.InnerText.Trim()))
innerTextList.Add(node.InnerText.Trim());// = node.InnerText;
foreach (var item in node.Attributes)
{
string values = item.Value;
values = values.ToLower();
if (values.Contains("FONT-WEIGHT:".ToLower()))
{
string wt = values.Split(new string[] { "FONT-WEIGHT:".ToLower() }, StringSplitOptions.None)[1].ToString();
if (wt.Trim().Split(';')[0].ToLower() == "bold")
{
startStringList.Add("<STRONG>");
lastStringList.Add("</STRONG>");
}
}
if (values.Contains("FONT-STYLE:".ToLower()))
{
string wt = values.Split(new string[] { "FONT-STYLE:".ToLower() }, StringSplitOptions.None)[1].ToString();
if (wt.Trim().Split(';')[0].ToLower() == "italic")
{
startStringList.Add("<I>");
lastStringList.Add("</I>");
}
}

if (values.Contains("TEXT-DECORATION:".ToLower()))
{
string wt = values.Split(new string[] { "TEXT-DECORATION:".ToLower() }, StringSplitOptions.None)[1].ToString();
if (wt.Trim().Split(';')[0].ToLower() == "underline")
{
startStringList.Add("<U>");
lastStringList.Add("</U>");
}
}
}
break;
case "p":
foreach (var item in node.Attributes)
{
string values = item.Value;
values = values.ToLower();
if (values.Contains("text-align:".ToLower()))
{
string wt = values.Split(new string[] { "text-align:".ToLower() }, StringSplitOptions.None)[1].ToString();
if (wt.Trim().Split(';')[0].ToLower() == "Center".ToLower())
{
startStringList.Add("<P align=center>");
lastStringList.Add("</P>");
}

if (wt.Trim().Split(';')[0].ToLower() == "Right".ToLower())
{
startStringList.Add("<P align=right>");
lastStringList.Add("</P>");
}

if (wt.Trim().Split(';')[0].ToLower() == "justify".ToLower())
{
startStringList.Add("<P align=justify>");
lastStringList.Add("</P>");
}
if (wt.Trim().Split(';')[0].ToLower() == "left".ToLower())
{
startStringList.Add("<P align=left>");
lastStringList.Add("</P>");
}
}
if (values.Contains("FONT-WEIGHT:".ToLower()))
{
string wt = values.Split(new string[] { "FONT-WEIGHT:".ToLower() }, StringSplitOptions.None)[1].ToString();
if (wt.Trim().Split(';')[0].ToLower() == "bold")
{
startStringList.Add("<STRONG>");
lastStringList.Add("</STRONG>");
}
}
if (values.Contains("FONT-STYLE:".ToLower()))
{
string wt = values.Split(new string[] { "FONT-STYLE:".ToLower() }, StringSplitOptions.None)[1].ToString();
if (wt.Trim().Split(';')[0].ToLower() == "italic")
{
startStringList.Add("<I>");
lastStringList.Add("</I>");
}
}

if (values.Contains("TEXT-DECORATION:".ToLower()))
{
string wt = values.Split(new string[] { "TEXT-DECORATION:".ToLower() }, StringSplitOptions.None)[1].ToString();
if (wt.Trim().Split(';')[0].ToLower() == "underline")
{
startStringList.Add("<U>");
lastStringList.Add("</U>");
}
}
}
break;
}
}

lastStringList.Reverse();
foreach (var item1 in startStringList)
{
final += item1;

}
foreach (var item3 in innerTextList)
{
final += item3 + "<br>";


}
final += innterText;
foreach (var item2 in lastStringList)
{
final += item2;
}

}
return final;
}

最佳答案

我会考虑使用 XDocument 和 XElement 来完成这项任务的繁重工作。

只要您可以控制内容的位置,使用 XML 结构编写 html 就会容易得多。这里有一个例子:

http://www.dotnetperls.com/xelement

但是,如果您四处搜索 XDocumentXElement,您会发现大量关于该主题的文档。

但看在上帝的份上,使用小写:)

关于c# - 使用 HtmlAgility 包转换 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36003931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com