2011-02-06 12 views
1

私は、別のプログラムで使用されるいくつかの特別なタグでマークアップしたサンプルHTMLを持っています。 <START:organization>..<END>要素に注意する必要があります。Nokogiriのカスタム要素に名前空間を保存するHTML

<html> 
<head/> 
<body> 
    <ul> 
    <li> <START:organization> Advanced Integrated Pest Management <END> </li> 
    <li> <START:organization> American Bakers Association <END> </li> 
    </ul> 
</body> 
</html> 

私は簡単に<script>のような無関係なタグを削除する前処理にHTMLを鋸山を使用していました。問題は、鋸山は<organization><START:organization>要素を変更していることである

module Nokogiri 
    module HTML 
    class Document 
     def prepare_html 
     xpath("//script").remove 
     to_html.remove_new_lines 
     end 
    end 
    end 
end 

:私は鋸山Documentクラスに次の拡張機能を作成しました。

私はカスタムマークアップタグを維持するためにHTMLを保存できますか?

答えて

1

他の2つのように、あなたの入力が標準のXMLでもHTMLでもない場合は、本当にそれが動作するように設計されたパーサを期待することはできません。

それにもかかわらず、あなたは、次のいずれかの操作を実行できます。 フォロー規格 に

  1. は(それが何であるか好奇心)を使用して、あなたが ている他のプログラムを変更するこの 場合
  2. のために働く鋸山をハックします
  3. 使用しているDSL用の個別の パーサーを作成する
1

Nokogiri :: XML :: Documentにパッチを適用してください。代わりにto_xmlを使用してください。名前空間はHTMLでは有効ではないため、Nokogiriは解析/生成しないと考えています。

あなたの<END>タグは有効なXMLではないため、どちらの標準でも文書が有効ではありません。

1

マークアップが有効な場合、HTMLパーサーではなくXMLパーサーで解析できます。

編集:ただ、実現この:

<START:organization>..<END> 

問題のカップルがここにあります。まず、開始タグと終了タグが一致しません。開始タグが '' then it should be terminated by 'の場合第2に、ノード名にコロンを使用することは、XMLで特定の意味を持ちます。つまり、最初の部分は名前空間で、2番目の部分はノード名です。この場合、「organization」という名前のタグを使用するか、属性にタグを含める必要があります。最初はおそらく最も理にかなっています。従って:

<organization>..</organization> 

これを変更できない場合は、有効なXMLでもHTMLでもないため、XML/HTMLパーサーを使用することはできません。

関連する問題