How can I replace content of tag in xml file with haxml.
I'm trying to replace `CurrentURI` tag's contents using HaXml. from, ``` <?xml version="1.0"?> <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <s:Body> <u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"> <InstanceID>0</InstanceID> <CurrentURI>AAAAAAAAAAAA</CurrentURI> <CurrentURIMetaData/> </u:SetAVTransportURI> </s:Body> </s:Envelope> ``` to, ``` <?xml version="1.0"?> <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <s:Body> <u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"> <InstanceID>0</InstanceID> <CurrentURI>BBBBBBBBBBBBBB</CurrentURI> <CurrentURIMetaData/> </u:SetAVTransportURI> </s:Body> </s:Envelope> ``` I had look around, hxt, xml-light, and haxml. I found `onContents` function from `Text.XML.HaXml.Wrappers` module and It looks like way to go. ``` λ: xml <- readFile "SetAVTransportURI.xml" :: IO String λ: let doc = xmlParse "dumb" xml λ: doc Document (Prolog (Just (XMLDecl "1.0" Nothing Nothing)) [] Nothing []) [] (Elem (N "s:Envelope") [(N "xmlns:s",http://schemas.xmlsoap.org/soap/envelope/),(N "s:encodingStyle",http://schemas.xmlsoap.org/soap/encoding/)] [CString False "\n " file dumb at line 2 col 125,CElem (Elem (N "s:Body") [] [CString False "\n " file dumb at line 3 col 11,CElem (Elem (N "u:SetAVTransportURI") [(N "xmlns:u",urn:schemas-upnp-org:service:AVTransport:1)] [CString False "\n " file dumb at line 4 col 79,CElem (Elem (N "InstanceID") [] [CString False "0\n " file dumb at line 5 col 19]) file dumb at line 5 col 7,CString False "\n " file dumb at line 6 col 20,CElem (Elem (N "CurrentURI") [] [CString False "\n" file dumb at line 7 col 19,CMisc (Comment " #EXTM3U ") file dumb at line 8 col 1,CMisc (Comment " #EXTINF:5850,\52628\49437\53945\49440\50689\54868 \47609\47329\44284\44053 140909 HDTV x264 720p AC3 \50864\47532\47568 \45433\51020 - nature boy ") file dumb at line 9 col 1,CMisc (Comment " http://192.168.219.2:8200/MediaItems/587.mkv ") file dumb at line 10 col 1,CMisc (Comment " #EXTM3U ") file dumb at line 11 col 1,CMisc (Comment " #EXTINF:6411,The.Adventures.of.Tintin.2011.1080p.BluRay.x264.YIFY ") file dumb at line 12 col 1,CString False "http://192.168.219.2:8200/MediaItems/165.mp4\n " file dumb at line 13 col 1]) file dumb at line 7 col 7,CString False "\n " file dumb at line 14 col 20,CElem (Elem (N "CurrentURIMetaData") [] []) file dumb at line 15 col 7,CString False "\n " file dumb at line 15 col 28]) file dumb at line 4 col 5,CString False "\n " file dumb at line 16 col 27]) file dumb at line 3 col 3,CString False "\n" file dumb at line 17 col 12]) [Comment "\nOrignal header from captured packets.\n\nPOST /smp_18_ HTTP/1.1\nHost: 192.168.219.6:7676\nSOAPAction: \"urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI\"\nAccept-Language: en-us;q=1, en;q=0.5\nAccept-Encoding: gzip\nContent-Type: text/xml; charset=\"utf-8\"\nUser-Agent: gupnp-av-cp GUPnP/0.20.12 DLNADOC/1.50\nConnection: Keep-Alive\nContent-Length: 1405\n"] λ: onContent (Text.XML.HaXml.Combinators.deep $ tag "CurrentURI") doc -- this result is not what I want. Document (Prolog (Just (XMLDecl "1.0" Nothing Nothing)) [] Nothing []) [] (Elem (N "CurrentURI") [] [CString False "\n" file dumb at line 7 col 19,CMisc (Comment " #EXTM3U ") file dumb at line 8 col 1,CMisc (Comment " #EXTINF:5850,\52628\49437\53945\49440\50689\54868 \47609\47329\44284\44053 140909 HDTV x264 720p AC3 \50864\47532\47568 \45433\51020 - nature boy ") file dumb at line 9 col 1,CMisc (Comment " http://192.168.219.2:8200/MediaItems/587.mkv ") file dumb at line 10 col 1,CMisc (Comment " #EXTM3U ") file dumb at line 11 col 1,CMisc (Comment " #EXTINF:6411,The.Adventures.of.Tintin.2011.1080p.BluRay.x264.YIFY ") file dumb at line 12 col 1,CString False "http://192.168.219.2:8200/MediaItems/165.mp4\n " file dumb at line 13 col 1]) [Comment "\nOrignal header from captured packets.\n\nPOST /smp_18_ HTTP/1.1\nHost: 192.168.219.6:7676\nSOAPAction: \"urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI\"\nAccept-Language: en-us;q=1, en;q=0.5\nAccept-Encoding: gzip\nContent-Type: text/xml; charset=\"utf-8\"\nUser-Agent: gupnp-av-cp GUPnP/0.20.12 DLNADOC/1.50\nConnection: Keep-Alive\nContent-Length: 1405\n"] λ: ``` How can I write filter to replace `CurrentURI` tag? 1. find 'CurrentURI' tag 2. replace content with some string 3. return modified whole document not just specific tag Or, Where can I found tutorial or example for haxml? Yes, I'm reading now haxml document. But needs some overview document. Any advice would be appreciated. Thanks.
participants (1)
-
Dontdie YCH