我正在使用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="<%=subid%>">
<img border="0" src="../common/images/edit2.gif"/>
</a>
<jsp:include page="sub-sublinks.htm">
</jsp:include>
</td>
</tr>
我真的很感激任何帮助。
答案 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 ;.较新版本可能设置为不进行替换,但我不确定。