我有html内容,看起来像
<body>Hello world</div><div>New day</div></body>
我想解析这个html片段并在Hello之前添加一个起始div标签。 我可以遵循什么方法?我尝试使用HTMLCLeaner,但它没有帮助 基本上这意味着找到结束div标签而不匹配start div标签并添加它们。
答案 0 :(得分:2)
如果您使用java,请尝试使用Jsoup。像
这样的东西Jsoup.clean("<body><div>Hello world</div><div>New day</div></body>", Whitelist.relaxed());
这将为您提供正确的输出字符串。
更新
您可以使用Jsoup.parse(html)
返回Document
,您可以在其中调用toString()
来获取包含所有html
和body
的固定html标签也是。它将为您提供以下输出html。
<html>
<head></head>
<body>
<div>
Hello world
</div
<div>
New day
</div>
</body>
</html>
正如你所说的那样,大多数解析器都会修复结束标记而不是开始标记,因为除了错误的结束标记之前它们无法决定从哪里开始标记,并且在那里添加开始标记将毫无用处在结束标记之前。
你可能需要实现自己的逻辑,因为Trevor Hutto的建议(基于堆栈的方法)如下,但它有其自身的复杂性取决于你的要求。
答案 1 :(得分:1)
你可以使用堆栈。
按下打开的标签,然后当您点击关闭标签时,弹出并将弹出的标签与您刚碰到的标签进行比较。
很明显,如果你有一个不匹配,而且它是一个div,你可以做点什么。
答案 2 :(得分:1)
John Resig的HTML Parser做得很好。它有点旧,但它仍然适用于我的大部分用例。
编辑:实际上,似乎只修复了缺少的结束标签,而不是打开标签......虽然一些调整可能会让它完成后者。
答案 3 :(得分:0)
您可以使用在括号平衡中使用的相同技术,除了不返回True / False,您将修改标记。我曾经为一个工作项目做过一次:
Recursive method for parentheses balancing [python]
Trevor所描述的与我所描述的相同(用于括号平衡)。
答案 4 :(得分:0)
我创建了一个 Javascript / jQuery 解决方案来添加缺少的起始标记:
将任何HTML 添加到包含缺少标记的正文:
hello</h3>
<p>hai</p>
Welcome to fiddle</span>
</div>
<强>使用Javascript / jQuery的强>
var content;
var i;
var result="";
var previousTag="";
function exeq(){
var a = content.lastIndexOf('<body>');
var z = content.lastIndexOf('</body>');
content = content.substring(a+6,z);
while(i!=-1){
var startAngle = content.indexOf('<');
var endAngle = content.indexOf('>');
i=endAngle;
var ele = content.substring(startAngle,endAngle+1);
if(ele.indexOf("/")!=-1)
{
if(previousTag != ele.replace("/",""))
result = result + ele.replace("/","");
}
result = result + content.substring(0,endAngle+1);
content = content.substring(endAngle+1);
previousTag = ele;
}
/*Below part only to append result to body*/
$('body').append('<h4>Result</h4><textarea>'+result+'</textarea>');
/******************************************/
}
$.get(window.location.href,function(data){
typeof(data)=="object"?window.location = window.location.href:
content = data;
exeq();
});
答案 5 :(得分:0)
<body>
<div>Hello world</div>
<div>New day</div>
</body>
您可以在hello world之前添加div,也可以在hello world之后删除结束div。 你好,世界 新的一天
答案 6 :(得分:-2)
你不需要HTMLCLeaner或任何工具,如果你需要使用html很简单就记住所有标签&lt;'something'&gt;与a关闭或使用简单的&lt;'something'/&gt;总结一个!