0

次のような改行を含むプレーンテキストがあります。

Dear Person,\r\nHello and welcome to this example.\r\nTodo: <ul><li>item 1</li>\r\n<li>item 2</li>\r\nThanks.

HtmlAgility パック (必要な場合) を使用して Html をクリーンアップし、新しい改行を BR に置き換えたいと思いますが、既に HTML タグ内にある場合を除きます (UL タグの LI を参照してください)。

regx を使用して BR を簡単に置き換えることができますtext.Replace(Environment.NewLine, "<br/>")が、タグ内にあるシナリオを除外するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

1

トップレベルの HTML テキスト ノードのみを処理する必要があるようです (テキスト ノードには子ノードがありません)。

var html = "Dear Person,\r\nHello and welcome to this example.\r\nTodo: <ul><li>item 1</li>\r\n<li>item 2</li>\r\nThanks.";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var textNodes = doc.DocumentNode.ChildNodes
    .OfType<HtmlTextNode>()
    .ToList();

foreach (var node in textNodes)
    node.Text = node.Text.Replace(Environment.NewLine, "<br />");

これにより、次のようなものが生成されます。

Dear Person,<br />Hello and welcome to this example.<br />Todo: <ul><li>item 1</li>\r\n<li>item 2</li>\r\nThanks.</ul>
于 2013-02-01T12:04:49.223 に答える
0
String sentence = "Dear Person,\r\nHello and welcome to this example.\r\nTodo: <ul><li>item 1\r\nitem 2</li>\r\n<li>item 3</li>\r\nThanks.";
String[] splits = Regex.Split(sentence, @"(<li>[^<]+</li>)");

for (Int32 i = 0; i < splits.Length; ++i)
{
    if (!splits[i].StartsWith("<li>"))
        splits[i] = splits[i].Replace("\r\n", "<br/>");
}

sentence = String.Join("", splits);

また、Environment.NewLine は使用しないでください。文字列の改行は常に "\r\n" ですが、異なる場合があります。

于 2013-01-18T03:05:51.560 に答える