1

我有一个 html 文件,我需要生成它使用的所有资源的列表:*.htm、*.html、*.css、*.js、*.jpg

我尝试了许多选项,例如 grep 和 sed,但没有太多成功。也不确定如何在 JAVA 中进行操作。

这是一个示例文件内容:

--------------------------------


>   <link rel="StyleSheet" href="css/webworks.css" type="text/css"
> media="all" />
>     <script type="text/javascript" language="JavaScript1.2"   src="wwhdata/common        /context.js">
>     /script>
>     <a class="WebWorks_Breadcrumb_Link" href="Page1.htm#1110364">Job Status</a> &gt;  Jobs tatus</div>
>     <div class="Indented"><a name="1115395">The <img class="Default"  src="images/Pic.2.jpg" width="26" height="29" style="display: inline;
 > float: none; left: 0.0; top: 0.0;" alt="" /> icon indicates that the
 > job is recurring. Hover the mouse over the icon to display the
     > schedule.</a></div>
 >     <div class="Body_Help_only"><a href="javascript:WWHClickedPopup('HelpSR2',   'Page4.htm#1110375', '');"
 > title="fsafsa" name="1118038">abcde</a></div>
 >     <div class="Body_Help_only"><a href="javascript:WWHClickedPopup('HelpSR2',   'Page2.htm#1110547', '');"
  > title="fsafsa" name="1118063">fsafsa</a></div>
  >     <div class="Body_Help_only"><a href="javascript:WWHClickedPopup('HelpSR2', 'Page3.htm#1110472', '');"
 > title="fsafasb" name="1118082">fsafsa</a></div>

输出应该是:

-----------------
css/webworks.css
wwhdata/common/context.js
Page1.htm
images/Pic.2.jpg
Page4.htm
Page2.htm
Page3.htm
4

2 回答 2

1

使用JSOUP

jsoup 是一个用于处理真实世界 HTML 的 Java 库。它提供了一个非常方便的 API 用于提取和操作数据,使用最好的 DOM、CSS 和类似 jquery 的方法。

于 2012-06-20T15:57:45.160 回答
0

以下内容应该可以帮助您:

% sed -n -E 's/.*(href|src)="([^"]*).*/\2/p' input.html

-n方法默认不打印行;该-E方法使用扩展的正则表达式(因此我们可以使用竖线进行交替);替换的尾随p意味着打印出任何成功替换的行。一起,这会找到任何带有href=orsrc=的行,将整行替换为"..."or 到 a之间的内容#,并打印出结果。

根据您的输入,这会产生:

css/webworks.css
wwhdata/common/context.js
Page1.htm
images/Pic.2.jpg
javascript:WWHClickedPopup('HelpSR2',   'Page4.htm
javascript:WWHClickedPopup('HelpSR2',   'Page2.htm
javascript:WWHClickedPopup('HelpSR2', 'Page3.htm

这个简单版本的限制:

  • 如果一行中有多个 href 或 src,它将不起作用;
  • 它无法提取 Javascript 参数的内容;
  • 它假定输入使用"..."而不是'...'分隔文件名。

这些中的每一个都可以通过对 sed 脚本的适当添加来改进,尽管第二个可能最好通过另一个 sed 脚本发送输出来完成,或者......

% cat /tmp/t.sed
s/.*(href|src)="([^#"]*).*/\2/
s/javascript.*'//
t x
b
:x
p
% sed -n -E -f /tmp/t.sed /tmp/so.txt
css/webworks.css
wwhdata/common/context.js
Page1.htm
images/Pic.2.jpg
Page4.htm
Page2.htm
Page3.htm
%

最后一张有点特别!我会留下你和手册页来制定细节。

于 2012-06-21T10:33:42.557 回答