如何告诉BeautifulSoup忽略jsp代码?

时间:2014-02-12 20:11:28

标签: python html-parsing beautifulsoup

我正在使用BeautifulSoup修改大量的html和jsp文件。这些是包含在主模板中的内容文件。一切正常,但是当我打印出结果时,BeautifulSoup删除了jsp文件中的jsp代码。无论如何要告诉BeautifulSoup忽略<%和%>之间的代码和标签?

以下是显示BeautifulSoup当前行为的代码:

原件:

<tr>
  <td colspan="3"><%   if (session.getAttribute("edit")!=null){ String subid="sub-sublinks.htm";%>
    <a href="<%=subid%>"><img src="../common/images/edit2.gif" border="0"></a>  
        <%}%><jsp:include page="sub-sublinks.htm"/>
  </td>
</tr>

目前的结果:

<tr>
  <td colspan="3">
    <a href="&lt;%=subid%&gt;">
      <img border="0" src="../common/images/edit2.gif"/>
    </a>
    <jsp:include page="sub-sublinks.htm">
    </jsp:include>
  </td>
</tr>

我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

我正在寻找同样问题的答案。经过所有研究,我得出结论,Beautifulsoup没有这个功能,但我已经采用了这种解决方法。

首先,我使用正则表达式将所有jsp标记与另一个xml标记和html注释(如<ignore><!--<%some jsp code%>--></ignore>)一起包装。我用这段代码做到了这一点:

readDocument = re.sub(r'(<%(.|\n)*?%>)',r'<ignore><!--\1--></ignore>',readDocument)

包装html注释的原因是Beautifulsoup忽略了<!-- -->

之间的代码

使用<ignore>标记包装的原因是在解析结束时轻松查找和删除html注释。

现在,你可以随心所欲地做任何事情&#39; readDocument&#39;。完成更改后,您可以使用以下代码清除额外的注释:

outputText = re.sub(r'<ignore><!--|--></ignore>', r'', outputText)

注意:我使用BeautifulSoup 3.2.0,因为这个版本不会改变&#39;&lt;&#39;和&#39;&gt;&#39;字符到&#39;&amp; LT;&#39;和&#39;&amp; GT;&#39 ;.较新版本可能设置为不进行替换,但我不确定。