我目前正在用 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/