需求是这样的.比如有一段HTML字符串.
中间可能有些标签没有闭合,可能有些标签缺少<或者> 或者/
总之可能出现很多影响这个HTML字符串完整格式的错误。
我现在要实现一个HTML字符串纠错的帮助类。
所以考虑的东西比较多 如果有哪位高手闲的话 希望不吝赐教 练练手。
测试HTML字符串
<body class='printBody'> <div class="printFormMiddleContainer">
<table width="100%" height="100%" cellspacing=0 cellpadding=0><tr><td valign="top"><div class="printTab"><table cellspacing=0 cellpadding=0 width="100%"><tr><td><table valign="top" cellspacing="0" cellpadding="0" border="0" width="100%"><tr><td><table valign="top" cellspacing=0 cellpadding=0 class="secTable" width="100%" height="1%" style="display:block;"><col/><col/><tr valign="top"><td class="formCell" colspan="2"><table cellpadding="0" cellspacing="0" border="0" style="width:100%;height:100%;"><col style="width:90px"/><col/><tr><td class="cellLabel" >名称:</td><td class="relatedInfoContent">aaaaaa</td></tr></table></td></tr><tr valign="top"><td class="formCell"><table cellpadding="0" cellspacing="0" border="0" style="width:100%;height:100%;"><col style="width:90px"/><col/><tr><td class="cellLabel" >客户:</td><td class="relatedInfoContent">Aaronrdg</td></tr></table></td><td class="formCell"><table cellpadding="0" cellspacing="0" border="0" style="width:100%;height:100%;"><col style="width:90px"/><col/><tr><td class="cellLabel" >报价人:</td><td class="relatedInfoContent">檀庭</td></tr></table></td></tr><tr valign="top"><td class="formCell"><table cellpadding="0" cellspacing="0" border="0" style="width:100%;height:100%;"><col style="width:90px"/><col/><tr><td class="cellLabel" >报价时间:</td><td class="relatedInfoContent">2013-10-29 16:41</td></tr></table></td><td class="formCell"><table cellpadding="0" cellspacing="0" border="0" style="width:100%;height:100%;"><col style="width:90px"/><col/><tr><td class="cellLabel" style="text-align:0;"></td><td class="relatedInfoContent"></td></tr></table></td></tr></table></td></tr></table></td></tr><tr><td><table valign="top" cellspacing="0" cellpadding="0" border="0" width="100%"><tr height="18"><td class="sec bar">商品清单</td></tr><tr height=5><td></td></tr><tr><td><table valign="top" cellspacing=0 cellpadding=0 class="secTable" width="100%" height="100%" style="display:block;"><col width="50%"/><col width="50%"/><tr valign="top" height="100%"><td class="formCell" colspan="2"><table cellpadding="0" cellspacing="0" border="0" style="width:100%;height:115px;"><col/><tr><td class="relatedInfoContent" style="padding-bottom:3px;"><table class="printTable" border="0" cellspacing="0" cellpadding="3"><tr><td class="printTdHeader" width="125" align="left">描述</td><td class="printTdHeader" width="125" align="left">规格</td><td class="printTdHeader" width="50" align="left">数量</td><td class="printTdHeader" width="75" align="left">单价 (¥)</td><td class="printTdHeader" width="75" align="left">小计 (¥)</td></tr><tr><td class="printTd" align="left">成本测试</td><td class="printTd" align="left">成本测试规格1</td><td class="printTd" align="left">2.00</td><td class="printTd" align="left">¥2,614.40</td><td class="printTd" align="left">¥5,228.80</td></tr><tr><td class="printTd" align="left">校园网站标准版</td><td class="printTd" align="left"> </td><td class="printTd" align="left">2.00</td><td class="printTd" align="left">¥33.00</td><td class="printTd" align="left">¥66.00</td></tr><tr><td class="printTd" align="left">成本测试</td><td class="printTd" align="left">成本测试规格2</td><td class="printTd" align="left">1.00</td><td class="printTd" align="left">¥3,300.00</td><td class="printTd" align="left">¥3,300.00</td></tr><tr><td class="printTd" align="left">参数5</td><td class="printTd" align="left"> </td><td class="printTd" align="left">1.00</td><td class="printTd" align="left">¥1.00</td><td class="printTd" align="left">¥1.00</td></tr><tr><td class="printTd" align="left">参数8</td><td class="printTd" align="left"> </td><td class="printTd" align="left">1.00</td><td class="printTd" align="left">¥2.00</td><td class="printTd" align="left">¥2.00</td></tr><tr><td class="printTd" align="left">参数9</td><td class="printTd" align="left"> </td><td class="printTd" align="left">1.00</td><td class="printTd" align="left">¥4.00</td><td class="printTd" align="left">¥4.00</td></tr><tr><td class="printTd" align="left">总价</td><td class="printTd" align="left"> </td><td class="printTd" align="left">0.00</td><td class="printTd" align="left">¥0.00</td><td class="printTd" align="left">¥8,601.80</td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></div></td></tr></table></div>
</body>
很早前有用过这个:SgmlReader,可以找找看对你有没有帮助。
这个需要正则高手现身才行了,而且查出来了怎么纠
查询出来再补上。
这个你得定一个规则,比如遇到内部标签和外部标签都没闭合,是优先内部标签还是外部,或是更复杂的规则。 解析标签用到的是数据结构中的栈,以前做过表达式分析计算的程序,如果真要分析,建议在网上先看看怎么解析四则运算。
你的没有闭合包括单个标签没有闭合,还是也包括成对的标签没有闭合,比如 <a 这个连右尖括号都没有,就比较难办了