c# - HTML Agility Pack (C#) 使我的代码变形

标签 c# xhtml html-agility-pack

我目前正在用 c# 编写一个桌面应用程序,它还必须处理 XHTML 文档操作。为此,我使用了 Html Agility Pack,到目前为止它似乎还不错。在仔细检查 Html Agility Pack 的输出后,我发现代码不再是格式正确的 xhtml。

它删除自闭合标签(斜线)并覆盖其他专有代码元素...

例如。 输入html代码:

<input autocapitalize="off" id="username" name="username" placeholder="Benutzername" type="text" value="$(username)" />

例如。 输出html代码

<input autocapitalize="off" id="username" name="username" placeholder="Benutzername" type="text" value="$(username)">

(删除尾部斜杠...)

另一个例子是专有代码元素(用于 Mikrotik 热点设备):

例如输入html代码

<form action="$(link-login-only)" method="post" name="login" $(if chap-id) onSubmit="return doLogin()"$(endif)>

$(if chap-id)$(endif)$(link-login-only) 部分是自定义代码从 Mikrotik 设备解释的片段。

例如。 在 Html Agility Pack 之后输出 html 代码(将其转换为无法使用的代码)

<form action="$(link-login-only)" method="post" name="login" $(if="" chap-id)="" onsubmit="return doLogin()" $(endif)="">

有人知道如何“指示”Html Agility Pack 输出格式良好的 XHTML 并忽略“自定义代码”片段(这可能是通过 Regex 实现的)吗?

提前致谢! :-)

最佳答案

在您的第一个示例中,HTML Agility Pack 实际上正在修复您的标记。输入元素是 void element .由于内部没有上下文,因此不需要结束标记。

HTML Agility Pack 用于解析有效的 HTML 标记,而不是嵌入自定义代码的标记。在您的第一个示例中,自定义标记在引号内,因此不是问题。在您的第二个示例中,变量在引号外。

HTML Agility Pack 尝试将它们解析为元素的常规(但格式错误)属性。没有办法解决这个问题。如果您需要支持标记内的自定义代码,则必须找到另一种方法来解析您的标记。

关于c# - HTML Agility Pack (C#) 使我的代码变形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16404871/

相关文章:

c# - WMI : the installation package is not accessible form the remote machine 远程安装问题

c# - .NET - 获取表单控件引用的正确方法

html - 如何使带有注释的 HTML 代码处于非事件状态

c# - System.Reflection.TargetInitationException 错误 (C#)

c# - NUnit 可扩展性 - 获取失败消息

javascript - 如何将效果与菜单列表和子菜单列表分开?

css - IE-7 Z-index问题

c# - C#中使用HtmlAgilityPack解析网页信息

html - 使用 XPATH 使用 HTML Agility Pack 获取元标记属性

c# - 如何在 ASP.NET Core 应用程序中获取 Soap 故障详细信息元素