【发布时间】:2016-06-11 02:07:30
【问题描述】:
我强迫自己学习如何仅在 AppleScript 中编写脚本,但我目前正面临一个问题,即尝试使用类删除特定标签。我试图找到可靠的文档和示例,但目前似乎非常有限。
这是我的 HTML:
<p>Bacon ipsum dolor amet pork chop landjaeger short ribs boudin short loin jowl <span class="foo">shoulder</span> biltong shankle capicola drumstick pork loin rump spare ribs ham hock. <span class="bar">Pig brisket</span> jowl ham pastrami <span class="foo">jerky</span> strip steak bacon doner. Short loin leberkas jowl, filet mignon turducken chicken ribeye shank tail swine strip steak pork loin sausage. Frankfurter ground round porchetta, pork short ribs jowl alcatra flank sausage.</p>
我想要做的是删除一个特定的类,所以它会删除<span class="foo">,结果:
<p>Bacon ipsum dolor amet pork chop landjaeger short ribs boudin short loin jowl shoulder biltong shankle capicola drumstick pork loin rump spare ribs ham hock. <span class="bar">Pig brisket</span> jowl ham pastrami jerky strip steak bacon doner. Short loin leberkas jowl, filet mignon turducken chicken ribeye shank tail swine strip steak pork loin sausage. Frankfurter ground round porchetta, pork short ribs jowl alcatra flank sausage.</p>
我知道如何使用do shell script 并通过终端执行此操作,但我想了解通过 AppleScript 的字典可用的内容。
在研究中,我能够找到一种方法来解析所有 HTML 标签:
on removeMarkupFromText(theText)
set tagDetected to false
set theCleanText to ""
repeat with a from 1 to length of theText
set theCurrentCharacter to character a of theText
if theCurrentCharacter is "<" then
set tagDetected to true
else if theCurrentCharacter is ">" then
set tagDetected to false
else if tagDetected is false then
set theCleanText to theCleanText & theCurrentCharacter as string
end if
end repeat
return theCleanText
end removeMarkupFromText
但这会删除所有 HTML 标记,这不是我想要的。搜索所以我能够找到如何使用Parsing HTML source code using AppleScript 在标签之间进行提取,但我不想解析文件。
我熟悉 BBEdit 的 Balance Tags,在下拉菜单中称为 Balance,但当我运行时:
tell application "BBEdit"
activate
find "<span class=\"foo\">" searching in text 1 of text document "test.html" options {search mode:grep, wrap around:true} with selecting match
balance tags
end tell
它变得贪婪,并抓住了第一个标签到倒数第二个结束标签之间的整行,中间有文本,而不是把自己隔离到第一个标签的文本中。
在tag 下的字典中进一步研究我确实遇到了find tag,我可以这样做:set spanTarget to (find tag "span" start_offset counter) 然后使用|class| of attributes of tag of spanTarget 类定位标签并使用balance tags,但我仍然遇到同样的问题问题和以前一样。
那么在 pure AppleScript 中,我怎样才能删除与类关联的标签而不使其变得贪婪?
【问题讨论】:
-
为什么?这个 HTML 来自哪里,你想用它做什么?如果您需要从其他人的网页中提取文本内容,唯一能够正确解析网页的智能设备就是网络浏览器,因此您应该考虑使用脚本编写 [例如] Safari。如果您尝试通过删除不需要的标签来清理旧的 HTML 文件,那么可能已经有一些工具可以为您做到这一点,例如你看过 BBEdit 的文档吗?无论如何,AppleScript 是您可以用于任何类型的“文本”处理的最糟糕的语言。使用 AS 驱动应用程序,让应用程序完成真正的工作。
标签: html css applescript bbedit