如何在HTML中添加匹配的开始标记

时间:2014-03-07 20:25:58

标签: html htmlcleaner

我有html内容,看起来像

<body>Hello world</div><div>New day</div></body>

我想解析这个html片段并在Hello之前添加一个起始div标签。 我可以遵循什么方法?我尝试使用HTMLCLeaner,但它没有帮助 基本上这意味着找到结束div标签而不匹配start div标签并添加它们。

7 个答案:

答案 0 :(得分:2)

如果您使用java,请尝试使用Jsoup。像

这样的东西
Jsoup.clean("<body><div>Hello world</div><div>New day</div></body>", Whitelist.relaxed());

这将为您提供正确的输出字符串。

更新

您可以使用Jsoup.parse(html)返回Document,您可以在其中调用toString()来获取包含所有htmlbody的固定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 解决方案来添加缺少的起始标记:

Demo Fiddle /观看Fullscreen

任何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;总结一个!