2012-04-02 10 views
2

Jsoupのようなものはありますか?HTMLを解析する代わりに、CSSを解析する必要があります。DocumentというCSSのモデルを作成するのと同様のパーサーがありますか?それはおそらくノードに反復するために使用できますか?JavaのCSSパーサー

私がする必要があるのは、CSSファイルの "url"を見つけて置き換えることです。そしてhtmlではこれはJsoupで簡単です。しかし、これがCSSで可能かどうかはわかりません。

このようなパーサーが存在しない場合は、どのようなオプションがありますか?

答えて

4

おそらくthisが役に立ちますか?

+0

このCSSパーサーを使用している場合、java.lang.NoClassDefFoundError:org/w3c/css/sac/DocumentHandlerを取得していますが、cssparser-0.9.6.jarとは別にjarを追加する必要がありますか? – xybrek

+0

[SAC](http://www.w3.org/Style/CSS/SAC/)が必要な場合があります。 – Taymon

2

のに役立ちますJavaCC文法であり、CSS2とCSS3の両方をサポートし、さらにHTMLスタイル属性を解析することができます。

It supports the most common hacks "*", "_" and "$" which are not spec compliant 
It supports CSS math - the calc() expression 
It supports the @page rule 
It supports the CSS3 media queries 
It supports @viewport rules 
It supports @keyframes rules 
It supports @supports rules - quite new 
It supports the @namespace rules 
You can get source location information for the different elements (line + column number for start and end - both for the tag as well as for the complete construct) 
3

私はちょうどgithubで利用可能なJavaのための私自身のCSSストリームパーサを展開。どのような設定は、このパーサは離れています

  • それはストリームパーサなので、パーサのハンドラは、各項目はすべて、ルールでは、現在、文書化のために
  • フルサポートを解析された直後に、すべての新しいコンテンツの通知を受け取ります
  • カスタムクラスTokenSequenceTokenセレクタを処理するためのプロセスを簡素化する、など
  • 使いやすいと検証のためか、より高度なアプリケーション
  • ため
  • 便利を理解するために
  • スケーラブル:CSS定義の変更を処理できるように設計されています。あなたの問題のために

、単に基本的な構文解析技術を使用します。

try 
{ 
    //First get the input stream. For example, from a file 
    InputStream is = new FileInputStream(new File("/path/to/my/CSS/main.css")); 

    //Then parse   
    CSSParser parser = new CSSParser(is, new DefaultCSSHandler()); 
    parser.parse(); 
} 
catch (Throwable t) 
{ 
    t.printStackTrace(); 
} 

をしかし、あなたが必要とする識別子を探すためにDefaultCSSHandlerでいくつかのメソッドをオーバーライドします。

+0

あなたのプロジェクトにこれを使っていますか? – xybrek

+0

どう比較するか:http://cssparser.sourceforge.net/ – xybrek

+0

@xybrekはい、私は現在、このパーサーを使って[droidQuery](http://bit.ly/droidquery)の* CSS *サポートを開発しています。私は前にリンクされたCSSパーサを見つけたが、混乱していた。また、私が覚えていれば見つけにくいライブラリをたくさん使います。私のパーサーは、SAC__を使用していません。スタンドアロンなので、一度ダウンロードすれば実行しやすくなります。さらに、私はよく文書化するようにしました。バリデータ以上のものに使用することを意図しているので、xml解析と同様に解析されたデータをどのように扱うべきかを理解しやすいはずです。 – Phil