0

html/xmlを解析し、タグの関数を実行し、タグ間のテキストを引数として渡すプログラム(bash、perl、ruby、それは実際には問題ではありません)が必要です。

例:

脚本:

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

file.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 |
              ||     ||

私の試み:

  • 一度に 1 文字ずつファイルを読み取る bash スクリプト。ここに表示するにはコードが不十分です。:(
  • Ruby と libxml を使用してソリューションに取り組んでいます - まだ運がありません。:(
4

1 に答える 1

1

では、タイトルを牛として印刷するだけですか?

そのためにhtmlを開く任意のコマンドラインxpathインタープリターを使用できます。

私のXidel

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

Xmlstarlet

  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分割を行うでしょう。(たとえば、「または」を削除し、複数のスペースを1つに変更します)

xqueryバージョン"1.0"; そこにあるので、&#x00;のようなxmlエンティティを解析します 文字列内(x00は実際にはXQuery文字列では許可されていないと聞いていますが、無効な入力のエラーチェックはまだありません)

そして、誰かが彼のhtmlファイルに持っている場合、//title | //whatothertagsyouwant代わりに使用する方がおそらく安全です。そうし//*ないと、いくつかの問題が発生します。<rm>-Rf /*</rm>

于 2012-12-22T21:34:18.417 に答える