c# - 为什么 HtmlParser 会删除换行符标记?

标签 c# wpf

我正在使用这个 HtmlFromXamlConverter来自微软并试图在 RichTextBox 上显示 html 脚本。 HtmlToXamlConverter 工作正常,但 HtmlFromXamlConverter 不行。

例子:

#Part.143
<p><b><font size="5">Wundklassifikation Diabetisches Fußsyndrom nach Wagner</font></b></p>
<b>Grad 0</b><br>Keine Läsion, evtl. Fußdeformation oder Cellulitis<br><br>
<b>Grad 1</b><br>Oberflächliches Ulkus<br><br>
<b>Grad 2</b><br>Tiefes Ulkus bis zur Gelenkkapel<br><br>
<b>Grad 3</b><br>Tiefes Ulkus mit Abszedierung, Osteomyelitis, Infektion der Gelenkkapsel<br><br>
<b>Grad 4</b><br>Begrenzte Vorfuß- oder Fersennekrose<br><br>
<b>Grad 5</b><br>Nekrose des gesamten Fußes<br><br>

如果我使用 HtmlToXamlConverter 将此 html 脚本转换为 XAML 脚本, 它在 RichTextBox 上显示如下: Screenshot from RichTextBox

然后当我使用 HtmlFromXamlConverter 将它从 XAML 转换回 html 时并使用生成的html代码显示在RichTextBox上,在RichTextBox上显示如下: Screenshot from RichTextBox (不再包括换行符)

这是我用来与 XAML 相互转换的 C# 代码

将 html 转换为 Xaml:

if(XamlReader.Parse(HtmlToXamlConverter.ConvertHtmlToXaml(File.ReadAllText(@"C:\Users\XXX\Documents\testHtml.html"), true)) is FlowDocument flowDoc)
{
           
      RichTextBox.Document = flowDoc;
}

从 Xaml 转换回 html:

string str1 = XamlWriter.Save(RichTextBox.Document);
string str = XamlToHtmlConverter.ConvertXamlToHtml(str1);

我试了好久都没成功。我很感激你的帮助

最佳答案

看起来这是转换器不对称的情况。

试试这个:

  • 在文件中查找(在 Visual Studio 中为 Ctrl-Shift-F),然后搜索 "Paragraph" .您会看到它在 ToXamlFromXaml 中都有匹配项。他们负责转换<p><Paragraph>反之亦然。
  • 现在寻找"LineBreak" .这是您问题的原因;它仅存在于 ToXaml 中,反之则不然。

解决方案是在 HtmlFromXamlConverter 中添加一个 LineBreak 处理程序。只需将它添加到段落处理程序旁边即可。

case "Paragraph":
    htmlElementName = "p";
    break;
// Add these:
case "LineBreak":
    htmlElementName = "br";
    break;

应该这样做。

注意:我希望你没有使用 <hr>因为这是另一个行不通的问题,而且更难修复。

关于c# - 为什么 HtmlParser 会删除换行符标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62667057/

相关文章:

c# - 如何使用 C#(在 unity3d 中)访问另一个类?

c# - 如何在多线程中获取函数的结果

c# - WPF 填充列表,为单击事件处理程序分配自定义变量以传递

wpf - DataGrid行详细信息可见性

.net - 鼠标单击和双击之间的区别

c# - Borderbrush 到 ComboBox

c# - 从 C# 调用 C++ exe 函数

c# - 访问 Azure 队列存储的 IIS 托管服务

c# - 使用 Microsoft.Build.Evaluation 发布数据库项目 (.sqlproj)

wpf - 制作控件 "transparent"点击事件