anglesharp - 我如何解析 document.write/response.write 以对 AngleSharp 使用单引号而不是双引号?
问题描述
我正在使用旧的html(ASP) 文件,我需要转换/解析它们以使用新的浏览器。
我正在使用 AngleSharp,我的问题是当它尝试解析使用单引号作为其值的响应和document.write并且 AngleSharp 将其解析为双引号时。
输入
Response.Write ("<input type=text name=attrname value='" + sVar + "'>");
输出(锐角)
Response.Write ("<input type="text" name="attrname" value="" + sVar + "">");
预期输出
Response.Write ("<input type='text' name='attrname' value='" + sVar + "'>");
有没有办法跳过解析或为两者设置不同的格式?先感谢您!
解决方案
序列化由IMarkupFormatter
. 默认情况下,此格式化程序对属性使用双引号(因为格式化程序不知道您在某些 ASP 代码中,而您在外部使用双引号)。
最简单的方法是滚动您自己的格式化程序(示例):
class MyMarkupFormatter : HtmlMarkupFormatter
{
protected override string Attribute(IAttr attr)
{
return $"{attr.Name}='{attr.Value}'";
}
}
你可以像这样使用它:
var config = Configuration.Default;
var context = BrowsingContext.New(config);
var input = "<input type=text name=attrname value='\" + sVar + \"'>";
var document = await context.OpenNewAsync();
var formatter = new MyMarkupFormatter();
document.Body.InnerHtml = input;
document.Body.FirstChild.ToHtml(formatter).Dump(); // <input type='text' name='attrname' value='" + sVar + "'>
请注意,Attribute
仅出于说明目的,实现如此简单。您应该处理更多案例(并可能处理转换包含的单引号等)。
推荐阅读
- reactjs - 如何从 NextJS 布局中的单个页面中删除 Header?
- python - Beautifulsoup4 find_all 没有得到我需要的结果
- html - 使用 ajax 和 Telerik Kento 打开带有搜索结果的模态
- android - java.lang.IllegalStateException:应为字符串,但在第 1 行第 28 列路径 $.message 改造 android studio 处为 BEGIN_ARRAY
- java - 我得到:“找不到mac的eclipse类文件编辑器源”
- python - 稳定基线3 日志奖励
- javascript - 具有不同 URL 的多个 websocket 连接
- postgresql - 触发函数以通过连接插入到不同的表中
- ruby-on-rails - Ruby:有没有办法在 File.write 中指定编码?
- c# - ComboBox 已设置 DataSource 但未显示任何项目