2009-09-09 2 views
1

는 모든 엔티티가HTML 엔티티 문제 : XML.fragment는

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

결과를 사용하여 사망하는 것으로 보인다 :

<p>test umlauts </p> 

위의 방법은 Nokogiri::XML::DocumentFragment.parse(tags)를 호출하는 메소드는 Nokogiri::XML::DocumentFragment.new(XML::Document.new, tags)를 호출합니다. 노코 기리 문서와 관련

이 코드가 실행됩니다

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 

나는 우리가 XML :: SAX :: 파서 및 해당 FragmentHandler 다루고있다 생각합니다. 코드를 파헤 치면 아무런 힌트도 얻지 못한다. 올바른 결과를 얻기 위해 어떤 매개 변수를 설정해야합니까?

답변

3

oouml은 XML의 미리 정의 된 엔터티가 아닙니다. XHTML에서 HTML 엔티티 참조를 허용하려면 doctype에서 외부 DTD를 읽는 파서를 사용해야합니다. 이것은 많은 노력입니다. 엔티티 참조가있는 HTML 호환 XHTML을 사용하는 경우 HTML 파서 만 사용하는 것이 좋습니다.

+0

노코 기리 :: HTML.fragment ("

테스트 움라우트 &oouml;

") =>

테스트 움라우트 & oouml;

. 이건 내가 원하는거야. 당신은 맞습니다 - 외부 DTD를 읽는 것은 많은 노력입니다 .... – crazyrails

+1

... 'oouml'?? 그것은 HTML에서도 정의 된 엔티티가 아닙니다! 'ouml'일까요? – bobince

+0

아아 - 당신은 결정적입니다! – crazyrails