Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. class Node
  2. attr_accessor :name, :children, :attributes
  3. def initialiaze(name, children, attributes)
  4. @name = name
  5. @children = children
  6. @attributes = attributes
  7. end
  8. end
  9. def parse_html(string)
  10. node = Node.new
  11. node.attributes = Hash.new
  12. tag_string = ""
  13. inside_tag = false
  14. tag_closed = false
  15. string.each_char do |i|
  16. if i == "<" && !tag_closed
  17. inside_tag = true
  18. tag_closed = false
  19. next
  20. end
  21. if i == ">" && inside_tag
  22. tag_closed = true
  23. inside_tag = false
  24. next
  25. end
  26. if inside_tag
  27. tag_string += i
  28. end
  29. end
  30. node.name = tag_string.split(" ")[0]
  31. attriute_string = tag_string.gsub(node.name, "")
  32. tag_string_parse(attriute_string, node)
  33. node
  34. end
  35. def tag_string_parse(attriute_string, node)
  36. in_key = true
  37. in_value = false
  38. key_array = []
  39. value_array = []
  40. key = ""
  41. value = ""
  42. attriute_string.each_char do |char|
  43. if char == "\"" && !in_value
  44. in_value = true
  45. in_key = false
  46. key_array << key.delete("=").delete("\"").strip
  47. key = ""
  48. elsif char == "\"" && in_value
  49. in_value = false
  50. in_key = true
  51. value_array << value.delete("\"").strip
  52. value = ""
  53. end
  54. if in_key
  55. key += char
  56. elsif in_value
  57. value += char
  58. end
  59. end
  60. key_array.each_with_index do |value, index|
  61. node.attributes[value] = value_array[index]
  62. end
  63. end
  64.  
  65.  
  66. string = "<note class=\"hello\" type=\"chello\"><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>"
  67. node = parse_html(string)
  68. p node.children
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement