2009-09-09 6 views
1

il semble que toutes les entités sont tuées à l'aideproblèmes HTML à l'aide de l'entité Nokogiri :: XML.fragment

tags = "<p>test umlauts &ouml;</p>" 
Nokogiri::XML.fragment(tags) 

Résultat:

<p>test umlauts </p> 

La méthode ci-dessus appelle Nokogiri::XML::DocumentFragment.parse(tags) et que les méthodes appelle Nokogiri::XML::DocumentFragment.new(XML::Document.new, tags).

En ce qui concerne la documentation nokogiri ce code sera exécuté:

def initialize document, tags=nil 
    if tags 
     parser = if self.kind_of?(Nokogiri::HTML::DocumentFragment) 
       HTML::SAX::Parser.new(FragmentHandler.new(self, tags)) 
       else 
       XML::SAX::Parser.new(FragmentHandler.new(self, tags)) 
       end 
     parser.parse(tags) 
    end 
end 

Je pense que nous avons affaire à XML :: SAX :: Parser et le FragmentHandler correspondant. Creuser autour du code ne donne aucun indice; Quels paramètres dois-je définir pour obtenir le bon résultat?

Répondre

3

oouml n'est pas une entité prédéfinie en XML. Si vous souhaitez autoriser les références d'entité HTML en XHTML, vous devez utiliser un analyseur qui a lu la DTD externe dans le doctype. C'est beaucoup d'effort. vous préférerez peut-être simplement utiliser l'analyseur HTML si vous avez du code XHTML compatible HTML avec des références d'entité.

+0

Nokogiri :: HTML.fragment ("

trémas de test &oouml;

") =>

de trémas de test & de oouml;

. Ce n'est pas ce que je veux. Vous avez raison - pour lire la DTD externe, c'est beaucoup d'efforts .... – crazyrails

+1

accrochez-vous ... 'oouml' ?? Ce n'est pas une entité définie même en HTML! Cela ne devrait-il pas être «ouml»? – bobince

+0

argh - vous avez définitivement raison! – crazyrails

Questions connexes