将html字符串写入csv文件
Posted
技术标签:
【中文标题】将html字符串写入csv文件【英文标题】:Write html strings to csv file 【发布时间】:2016-10-22 23:36:24 【问题描述】:是否可以将html字符串输出到csv。
尝试将数据从 cms 导出到 csv 和 Excel。每段 html 都可以包含逗号和其他任何内容。
EG. <p class="myclass">This is an example, of the string</p>
在 Excel 中导入中断,尽管前几行是正确的,但错误的数据出现在错误的列中。
我想实现这种格式
col1,col2,col3
"1","<p class="myclass">This is an example, of the string</p>","and more html here"
我已经尝试过这种事情 - 我正在迭代 cms 中的内容项并将每个属性输出为单独的 csv 数据值,用引号括起来并用逗号分隔。
foreach (var prop in offer.Properties) //.Where(x=>x.Alias != "Id"))
var @propValue = prop.Value.ToString().Replace("\"", "'");
// Append comma except last
sb.Append(prop != offer.Properties.Last()
? "\"" + propValue + "\","
: "\"" + propValue + "\"");
sb.Append(Environment.NewLine);
更新: 事实上,这项任务被证明充满了困难。最初的目标是快速将一组节点及其属性从 Umbraco CMS 导出到 Excel 文件。我了解到对于这种类型的数据,csv 可能不是正确的格式,它完全基于存储在 xml 中的数据,包括编码的 html sn-ps。
在我们的例子中,实现我们想要的最佳方式是将导出的数据输出为 Excel 可以理解的 html 表格,该表格保持编辑器友好的格式,而不是编码的 html sn-ps。
【问题讨论】:
你想要实现什么?你想把<p class="myclass">This is an example, of the string</p>
解析成什么?给我们一些示例 od 输出!
刚刚添加了所需格式的更多说明
为什么不用 EPPlus 创建一个真正的 Excel 文件?生成工作表可以像ws.LoadFromDataTable(someTable);
或ws.LoadFromCollection(someList);
一样简单。除此之外,尝试将 HTML 放入 CSV 只是自找麻烦。您不能简单地替换或编码所有引号,因为 HTML sn-p 可能已经包含编码字符串。您可以尝试使用一些真正意想不到的字符作为列和行分隔符,例如 ¤ 和 ¶
@wingyip 如果对数据没有严格限制,例如没有换行符、没有转义引号、属性只有单引号等,您所问的可能是不切实际的。真正的 问题是什么你想解决?为什么您认为以 CSV 格式导出 HTML 是解决方案?
感谢您让我想到替代方案@PanagiotisKanavos
【参考方案1】:
你可以HtmlEncode
去掉你的引号“。”的字符串。
string data = "<p class=\"myclass\">This is an example, of the string</p>";
Server.HtmlEncode(data);
https://msdn.microsoft.com/en-us/library/w3te6wfz(v=vs.110).aspx
编辑:
"<a href=&quote;http://www.example.com&quote;>link</a>","<b>more html</b>"
【讨论】:
逗号呢? 您的逗号将被 CSV 字符串包围。查看更新的答案。【参考方案2】:在编码/解码 csv 时,我宁愿使用插件/库,当我自己尝试这样做时,我会咬自己一些讨厌的用例(如何根据语言环境记录小数,不均匀的数据, 转义字符等。)我使用了 CsVHelper 的调整版本,但你可以在网上找到很多不同的版本。
关于您的更新。我建议不要直接用html填充你的csv,而是用实际值填充它。将您的 View Logic 远离您的 Model Logic 。让我们做一个简单的例子。
<table>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</table>
如果我以这种格式给你数据:
A B C
1 2 3
甚至是这种格式:
A,B,C
1,2,3
您可以很容易地根据这些数据重新创建 html 表;或创建图表;或word文档;或您希望向用户展示模型的任何方式。
反之,表格中的一组数据
<th>A</th>, <th>B</th> , <th>C</th>
<td>1</td>, <td>2</td> , <td>3</td>
每次您要在除 html 之外的不同上下文中使用数据时,都会强制您进行解析。将视图和模型放在不同的位置将使您的工作更轻松。
【讨论】:
以上是关于将html字符串写入csv文件的主要内容,如果未能解决你的问题,请参考以下文章
pandas to_csv:将 pandas 写入 csv 时抑制 csv 文件中的科学记数法