0

我需要一个程序(bash、perl、ruby,这并不重要),它解析 html/xml 并执行标签函数并在标签之间传递文本作为参数。

例子:

脚本:

#!/bin/????
. /path/to/parser
title()
{
cowsay $1
}
exit

文件.html:

<html>
<head>
<title>Hello, World!</title>
</head>
<body>
This is only a test.
<br/>
I hope it works!
</body>
</html>

用法:

./script file.html

结果:

 _______________ 
< Hello, World! >
 --------------- 
      \   ^__^
       \  (oo)\_______
          (__)\       )\/\
              ||----w |
              ||     ||

我的尝试:

  • 一次读取一个字符的 bash 脚本。代码不够好,无法在此处显示。:(
  • 使用 Ruby 和 libxml 开发解决方案 - 还没有运气。:(
4

1 回答 1

1

所以只需将标题打印为牛?

您可以使用任何为此打开 html 的命令行 xpath 解释器:

我的西德尔

  xidel file.html -e //title 2> /dev/null | cowsay

小星星

  xmlstarlet sel --html -t -v //title file.html | cowsay 

您可以打印所有带有值的 html 标签,分隔 \0 然后运行它们:

title (){
  cowsay $@
}

xidel file.html -e 'xquery version "1.0"; for $i in //* return concat(name($i), " ", $i, "&#x00;")' | while read  -d $'\0' i; do $i; done

它可能会对参数进行一些 bash 拆分。(例如删除“或”,将多个空格更改为一个)

xquery 版本“1.0”;在那里,所以它解析像 这样的 xml 实体 在字符串中(虽然我听说 XQuery 字符串中实际上不允许使用 x00,还好我还没有对无效输入进行错误检查)

如果有人在他的 html 文件中,使用它可能更安全//title | //whatothertagsyouwant,否则你会遇到一些问题。//*<rm>-Rf /*</rm>

于 2012-12-22T21:34:18.417 回答