Как получить inner_html ruby ​​Nokogiri NodeSet без помощи? - PullRequest
8 голосов
/ 19 ноября 2009

Я хотел бы получить неэкранированный внутренний html из NodeSet Nokogiri. Кто-нибудь знает, как это сделать?

Ответы [ 4 ]

4 голосов
/ 24 ноября 2009

Что-нибудь не в порядке?

nodeset.inner_html
2 голосов
/ 26 мая 2012

Камень люфа очень мне здесь помог.

1 голос
/ 27 февраля 2014

Оберните ваши узлы в CDATA:

def wrap_in_cdata(node)
    # Using Nokogiri::XML::Node#content instead of #inner_html (which
    # escapes HTML entities) so nested nodes will not work
    node.inner_html = node.document.create_cdata(node.content)
    node
end

Nokogiri::XML::Node#inner_html экранирует сущности HTML, за исключением разделов CDATA.

fragment = Nokogiri::HTML.fragment "<div>Here is an unescaped string: <span>Turn left > right > straight & reach your destination.</span></div>"
puts fragment.inner_html
# <div>Here is an unescaped string: <span>Turn left &gt; right &gt; straight &amp; reach your destination.</span></div>


fragment.xpath(".//span").each {|node| node.inner_html = node.document.create_cdata(node.content) }
fragment.inner_html
# <div>Here is an unescaped string: <span>Turn left > right > straight & reach your destination.</span>\n</div>
0 голосов
/ 04 мая 2010

Старая версия libxml2 может привести к тому, что Nokogiri вернет некоторые экранированные символы. У меня недавно была эта проблема.

...