2009-10-18 7 views
3

J'ai un xpath pour saisir chaque noeud de texte qui n'est entouré par aucune balise html. Au lieu de cela, ils sont séparés via <br>. Je voudrais envelopper ces avec <span> étiquettes.nokogiri: comment envelopper les balises html autour d'éléments xpath donnés?

Nokogiri::HTML(open("http://vancouver.en.craigslist.ca/van/swp/1426164969.html")) 
.xpath("//br/following-sibling::text()|//br/preceding-sibling::text()").to_a 

retournera ces nœuds de texte.

code complet revisé ci-dessous:

doc = Nokogiri::HTML(open("http://vancouver.en.craigslist.ca/van/swp/1426164969.html")) 
.xpath("//br/following-sibling::text()|//br/preceding-sibling::text()").wrap("<span></span>") 
puts doc 

Je devrait voir un code source html avec ces textes enveloppées avec <span> balises, mais j'ai les suivantes:

Date: 2009-10-17, 4:36PM PDT 
Reply to: 
This is a spectacular open plan 1000 sq. ft. loft is in a former Canada Post building. Upon entering the loft from the hallway you are amazed at where you have arrived.... a stunning, bright and fully renovated apartment that retains its industrial feel. The restoration of the interior was planned and designed by a famous Vancouver architect. 
The loft is above a police station, so youÂre guaranteed peace and quite at any time of the day or night. 
The neighborhood is safe and lively with plenty of restaurants and shopping. ThereÂs a starbucks across the street and plenty of other coffee shops in the area. Antique alley with its hidden treasures is one block away, as well as the beautiful mile long boardwalk. Skytrain station is one minute away (literally couple of buildings away). 15 minutes to Commercial drive, 20 minutes to downtown Vancouver and Olympic venues. 
Apartment Features: 
-  Fully furnished 
-  14 ft ceilings 
-  Hardwood floors 
-  Gas fireplace 
-  Elevator 
-  Large rooftop balcony 
-  Full Kitchen: Fully equipped with crystal, china and utensils 
-  Dishwasher 
-  Appliances including high-end juice maker, blender, etc. 
-  WiFi (Wireless Internet) 
-  Bathtub 
-  Linens &amp; towels provided 
-  Hair dryer 
-  LCD Flat-screen TV with DVD player 
-  Extensive DVD library 
-  Music Library: Ipod connection 
-  Wii console with Guitar Hero, games 
-  Book and magazine library 
-  Non-smoking 
We are looking to exchange for a place somewhere warm (California, Hawaii, Mexico, South America, Central America) or a place in Europe (UK, Italy, France). 
Email for other dates and pictures of the loft. 

Répondre

4

Votre variable doc est non affecté à l'ensemble du document - vous devez utiliser

doc = Nokogiri::HTML(open("http://vancouver.en.craigslist.ca/van/swp/1426164969.html")) 
doc.xpath("//br/following-sibling::text()|//br/preceding-sibling::text()").wrap("<span></span>") 
puts doc 

Unfortunat ely il ne résout pas le problème comme Nokogiri premières places tous que toutes les travées brs avec du texte comme celui-ci:

<br><br><br><br><span> 
text</span><span> 
text</span><span> 
text</span><span> 
text</span> 

Mais vous pouvez le faire comme ça

doc = Nokogiri::HTML(open("http://vancouver.en.craigslist.ca/van/swp/1426164969.html")) 
doc.search("//br/following-sibling::text()|//br/preceding-sibling::text()").each do |node| 
    node.replace(Nokogiri.make("<span>#{node.to_html}</span>")) 
end 
puts doc