【问题标题】:How to add matching start tag in HTML如何在 HTML 中添加匹配的开始标签
【发布时间】:2014-04-11 04:29:06
【问题描述】:

我的 html 内容看起来像

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

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

【问题讨论】:

  • 如果您使用 java,请尝试使用 Jsoup。类似Jsoup.clean("&lt;body&gt;Hello world&lt;/div&gt;&lt;div&gt;New day&lt;/div&gt;&lt;/body&gt;", Whitelist.relaxed());
  • 刚试过,它给了我“Hello world
    New day
  • 这是一个有趣的问题。大多数解析器不会尝试插入开始标签,因为没有办法知道它应该去哪里。从技术上讲,它可以从body 的开始到结束div 的开始。是否有一些模式可以用来预测它们应该插入的位置?

标签: html htmlcleaner


【解决方案1】:

您不需要 HTMLCLeaner 或任何工具,如果您需要使用 html 非常简单,只需记住所有标签 都与 a 接近,或者使用简单的 进行总结!

【讨论】:

    【解决方案2】:

    你可以使用堆栈。

    按下打开的标签,然后当您点击关闭标签时,弹出并比较弹出的标签与您刚刚遇到的标签。

    所以很明显,如果你有一个不匹配,并且它是一个 div,你可以做一些事情。

    【讨论】:

      【解决方案3】:

      您可以使用括号平衡中使用的相同技术,除了不返回 True/False,而是修复标记。我曾经为一个工作项目这样做过:

      Recursive method for parentheses balancing [python]

      Trevor 所描述的与我所描述的相同(用于括号平衡)。

      【讨论】:

        【解决方案4】:

        如果您使用 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 的建议(基于堆栈的方法)来实现您自己的逻辑,但它会有自己的复杂性取决于您的要求。

        【讨论】:

        • 我刚试过。它给了我 Hello world
          新的一天
        • 我期望的是“
          Hello world
          新的一天
        • 是的,它会删除无效标签。它就像一个浏览器,因为它无法预测在哪里添加开始标签。
        【解决方案5】:

        John Resig 的HTML Parser 在这方面做得很好。它有点老了,但它仍然适用于我的大部分用例。

        编辑:实际上,它似乎只修复了缺少的结束标签,而不是开始标签……尽管一些调整可能可以让它做后者。

        【讨论】:

        • 没错,这就是我要找的。所有的解析器只修复丢失的结束标签,但没有添加丢失的开始标签......真的没有一个解析器做我需要的吗?
        【解决方案6】:

        我创建了一个 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();
        });
        

        【讨论】:

          【解决方案7】:
          <body>
          <div>Hello world</div>
          <div>New day</div>
          </body>
          

          您可以在 hello world 之前添加一个 div,也可以在 hello world 之后删除关闭的 div。 你好世界 新的一天

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-02-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-09
            • 1970-01-01
            相关资源
            最近更新 更多