2017-09-01 2 views
0

Ich analysiere etwas HTML mit Floki. Und die folgende Tupel erhalten:Elixir/Phoenix enum durch Tuple, um Pfade zu ersetzen

{"html", [{"lang", "en"}], 
[{"head", [], 
    [{"title", [], ["My App"]}, 
    {"link", [{"rel", "stylesheet"}, {"href", "/css/app.css"}], []}]}, 
    {"body", [], 
    [{"main", [{"id", "main_container"}, {"role", "main"}], []}, 
    {"script", [{"src", "/js/app.js"}], [""]}, 
    {"iframe", 
    [{"src", "/phoenix/live_reload/frame"}, {"style", "display: none;"}], 
    []}]}]} 

Ist es möglich, alle Elemente aufzuzählen durch, und für diejenigen, die href oder src hinzufügen vollständigen Pfad zu ihnen haben? Zum Beispiel ersetzen Sie in diesem Fall sie mit: http://localhost/css/app.css und http://localhost/js/app.js

+0

Ja, es ist möglich. – JustMichael

Antwort

2

Hier ist eine Möglichkeit, wie Sie es mit einer rekursiven Funktion tun könnten.

defmodule HTML do 

    def use_full_path({el, attrs, children}) do 
    {el, update_attrs(attrs), Enum.map(children, &use_full_path/1)} 
    end 

    def use_full_path(string) do 
    string 
    end 


    defp update_attrs(attrs) do 
    Enum.map(attrs, fn {key, val} -> 
     if key in ["href", "src"] do 
     {key, "http://localhost" <> val} 
     else 
     {key, val} 
     end 
    end) 
    end 
end 

tree = {"html", [{"lang", "en"}], 
[{"head", [], 
    [{"title", [], ["My App"]}, 
    {"link", [{"rel", "stylesheet"}, {"href", "/css/app.css"}], []}]}, 
    {"body", [], 
    [{"main", [{"id", "main_container"}, {"role", "main"}], []}, 
    {"script", [{"src", "/js/app.js"}], [""]}, 
    {"iframe", 
    [{"src", "/phoenix/live_reload/frame"}, {"style", "display: none;"}], 
    []}]}]} 

HTML.use_full_path(tree) |> IO.inspect 
+0

'if' sieht böse in Elixir-Code, würde es Ihnen etwas ausmachen, es zu 2 verschiedenen Funktionsklauseln zu ändern? – mudasobwa

+3

Es besteht keine Notwendigkeit für die erste 'use_full_path'-Klausel, soweit ich sehen kann. – Dogbert

+0

Hey @ Gazler, vielen Dank! Funktioniert genau so wie ich es brauchte. Ich wünsche ihnen einen wunderbaren Tag! – Ilya

Verwandte Themen