【发布时间】:2015-12-03 00:42:03
【问题描述】:
我最初的问题是我试图将包含 html 标记的字符串序列化为 XML 元素。
hello <a href="world.php">World</a>, this
is
a nice
test
<ul>
<li>to demonstrate my issue</li>
<li>and find a solution</li>
</ul>
但是,我有 2 个问题
- 将 HTML 序列化为 XML:我没有成功定义 Serializable 类以使用 XmlSerialze 正确序列化,因此我决定使用 CDATA 部分可能是更好的方法。然而,这并没有被目标工具正确反序列化(我对此没有影响)。我需要的是 xml 输出文件中的普通且正确的 html(XHMTL?)。
2.字符串看起来例如如上所述,但不是完全正确的 html(没有
<p> 标签,没有<br> 标签)。
现在我想用 p 或 br 标签替换换行符。我看过here 并使用了建议的解决方案:
string result = "<p>" + text
.Replace(Environment.NewLine + Environment.NewLine, "</p><p>")
.Replace(Environment.NewLine, "<br />")
.Replace("</p><p>", "</p>" + Environment.NewLine + "<p>") + "</p>";
但是,这并不是在所有情况下都会生成有效的 html。在上面的示例中,它会在<li> 标签之间创建<br />s,或者在<p> 标签中导致<ul> 标签——这都是不允许的。
目标是得到如下结果(换行符只是为了更好的可读性,在这里无关紧要)
<p>hello <a href="world.php">World</a>, this</p>
<p>is<br/>
a nice<br/>
test<br/></p>
<ul>
<li>to demonstrate my issue</li>
<li>and find a solution</li>
</ul>
您有任何建议如何使用字符串替换、正则表达式或更好的解决方案(HtmlDocument)来解决这个问题?
请注意:我对反序列化没有影响,XML输出是由我没有影响的工具评估的,它必须是UTF-8编码的。
谢谢!
编辑:明确区分 2 个问题
EDIT2:对反序列化没有影响
EDIT3:添加目标输出
【问题讨论】:
-
html 编码怎么样?
-
您的问题是“如何在 XML 中传输 HTML”,还是 “如何从无效的 HTML 中生成有效的 HTML”?还是“哪个更容易”?
-
有效问题,实际上两者都有,但第二个优先级更高。我已经把上面的 2 个主题分开了