Avatar billede mr.malmros Juniormester
04. september 2014 - 13:34 Der er 6 kommentarer

XML formatering af æøå

Hej.

Her er et dejligt regionsspecifikt spørgsmål.

Jeg har en løsning hvor jeg foretager et opslag på cvrapi.dk med nedenstående script:

Insert from URL [Select; No dialog; CVR Data::_raw_: "http://cvrapi.dk/api?vat=" & CVR Data::_vat_ & "&country=dk&format=xml"]

Jeg har dertil oprettet en funktion:

Let ( [
XML_Length = Length ( XML ) ;
Attribute_Length = Length ( Attribute ) ;
Get_Instance = If ( IsEmpty ( Instance ) ; 1 ; Instance )
];
Case(
IsEmpty ( XML ) or IsEmpty ( attribute ) or PatternCount ( xml ; "<" & attribute & ">" ) = 0 ; "" ;
Middle ( XML ; Position ( XML ; "<" & attribute & ">" ; 1 ; Get_Instance ) + attribute_length + 2 ;
xml_length - ( xml_length - Position ( XML ; "</" & attribute & ">" ; 1 ; Get_Instance ) ) - ( Position ( XML ; "<" & attribute & ">" ; 1 ; Get_Instance ) + Attribute_Length + 2 ) )
) )


Funktionen kaldes så fra hvert field som en calculeret værdi:

ExtractXML ( _raw_ ; "name" ; 1 )

Ovenstående returnerer virksomhedes navn.

Problemet er nu, at æøå (også ÆØÅ) bliver udfyldt med koder istedet for tegn, eksempelvis bliver ø til "&#xF8;"


Giver 200 point for denne, for jeg har virkelig brug for hjælp nu.
Avatar billede soholm Nybegynder
04. september 2014 - 14:41 #1
Måske ville du kunne lave noget smart med PHP (enten som plugin eller via Custom Web Publishing Engine), men hvis vi skal holde os til FileMaker, så kan jeg ikke lige finde nogen eksisterende custom function, der kan det, du har brug for.

Der er en, der kommer tæt på her:
http://www.briandunning.com/cf/1381

Men den er vist heller meget bevendt her.

Så hvis jeg var dig, ville jeg nok bare skrive en custom function baseret på denne liste:

www.w3schools.com/charsets/ref_html_entities_4.asp

Efter samme model som ovenstående custom function, dvs:

  Substitute ( input  ;
    ["&#xE6;" ; "æ"];
    ["&#xF8;"; "ø"];
    ["&#xE5;" ; "å"]
  )

... osv

Det er nok det hurtigste for dig.
Avatar billede mr.malmros Juniormester
04. september 2014 - 15:21 #2
Aha, ok. Tak for hurtigt svar.
Det er jo én måde at løse det på, og det er nok det jeg ender op med at gøre.

Så jeg laver en ny funktion til dette, og smider den funktion ind i funktionen til at hente xml filen med, så at data bliver rigtigt i _raw_ feltet til at starte med, ikke?

Jeg kunne nu godt drømme at finde en metode til at behandle xml filen korrekt til at starte med, men  det er sikkert ikke muligt inden for rammerne af FMP13.

Jeg prøver det lige af i aften eller i morgen.
Avatar billede soholm Nybegynder
05. september 2014 - 10:14 #3
Ikke for at tærske langhalm på 'rigtig' og 'forkert', men jeg er ved ikke, om det er fair at forlange eller forvente at FileMaker oversætter html til text. Den er jo trods alt ikke en webbrowser ;-). (Men hvis man sætter teksten ind i webviewer, bliver den oversat.)
Der er jo sikkert mange andre situationer, hvor man ville betakke sig for at FMP oversatte en tekst uden videre. Men man kunne måske godt ønske sig, at FileMaker skrev en konverteringsfunktion, der oversatte alle HTML-entities til text.
Avatar billede soholm Nybegynder
05. september 2014 - 10:17 #4
Søgte lige igen. Og fandt en custom function af den uforlignelige Fabrice Nordmann:

http://www.fmfunctions.com/functions_display_record.php?functionId=178

Den oversætter desværre ikke hexadecimale html entities, men kun decimale, men hvis man gider, kan man jo oversætte hexcoden til decimaler og så har man en fuldt dækkende custom function til det hele.
Avatar billede mr.malmros Juniormester
05. september 2014 - 12:22 #5
Fabrice Nordmanns funktion ser ud til at virke.
Jeg erstattede så decimallisten med den hexdecimale liste du linkede til.
Her er resultatet:

Let ( [ _text = Case($HTMLencoded2Text_deep; _text; Substitute ( _text ;
    ["&#x26;"; "&"] ;
    ["&#x3C;"; "<"] ;
    ["&#x3E;"; ">"] ;
    ["&#xA0;"; ""] ;
    ["&#xA1;"; "¡"] ;
    ["&#xA2;"; "¢"] ;
    ["&#xA3;"; "£"] ;
    ["&#xA4;"; "¤"] ;
    ["&#xA5;"; "¥"] ;
    ["&#xA6;"; "¦"] ;
    ["&#xA7;"; "§"] ;
    ["&#xA8;"; "¨"] ;
    ["&#xA9;"; "©"] ;
    ["&#xAA;"; "ª"] ;
    ["&#xAB;"; "«"] ;
    ["&#xAC;"; "¬"] ;
    ["&#xAD;"; ""] ;
    ["&#xAE;"; "®"] ;
    ["&#xAF;"; "¯"] ;
    ["&#xB0;"; "°"] ;
    ["&#xB1;"; "±"] ;
    ["&#xB2;"; "²"] ;
    ["&#xB3;"; "³"] ;
    ["&#xB4;"; "´"] ;
    ["&#xB5;"; "µ"] ;
    ["&#xB6;"; "¶"] ;
    ["&#xB7;"; "·"] ;
    ["&#xB8;"; "¸"] ;
    ["&#xB9;"; "¹"] ;
    ["&#xBA;"; "º"] ;
    ["&#xBB;"; "»"] ;
    ["&#xBC;"; "¼"] ;
    ["&#xBD;"; "½"] ;
    ["&#xBE;"; "¾"] ;
    ["&#xBF;"; "¿"] ;
    ["&#xC0;"; "À"] ;
    ["&#xC1;"; "Á"] ;
    ["&#xC2;"; "Â"] ;
    ["&#xC3;"; "Ã"] ;
    ["&#xC4;"; "Ä"] ;
    ["&#xC5;"; "Å"] ;
    ["&#xC6;"; "Æ"] ;
    ["&#xC7;"; "Ç"] ;
    ["&#xC8;"; "È"] ;
    ["&#xC9;"; "É"] ;
    ["&#xCA;"; ""] ;
    ["&#xCB;"; "Ë"] ;
    ["&#xCC;"; "Ì"] ;
    ["&#xCD;"; "Í"] ;
    ["&#xCE;"; "Î"] ;
    ["&#xCF;"; "Ï"] ;
    ["&#xD0;"; "Ð"] ;
    ["&#xD1;"; "Ñ"] ;
    ["&#xD2;"; "Ò"] ;
    ["&#xD3;"; "Ó"] ;
    ["&#xD4;"; "Ô"] ;
    ["&#xD5;"; "Õ"] ;
    ["&#xD6;"; "Ö"] ;
    ["&#xD7;"; "×"] ;
    ["&#xD8;"; "Ø"] ;
    ["&#xD9;"; "Ù"] ;
    ["&#xDA;"; "Ú"] ;
    ["&#xDB;"; "Û"] ;
    ["&#xDC;"; "Ü"] ;
    ["&#xDD;"; "Ý"] ;
    ["&#xDE;"; "Þ"] ;
    ["&#xDF;"; "ß"] ;
    ["&#xE0;"; "à"] ;
    ["&#xE1;"; "á"] ;
    ["&#xE2;"; "â"] ;
    ["&#xE3;"; "ã"] ;
    ["&#xE4;"; "ä"] ;
    ["&#xE5;"; "å"] ;
    ["&#xE6;"; "æ"] ;
    ["&#xE7;"; "ç"] ;
    ["&#xE8;"; "è"] ;
    ["&#xE9;"; "é"] ;
    ["&#xEA;"; "ê"] ;
    ["&#xEB;"; "ë"] ;
    ["&#xEC;"; "ì"] ;
    ["&#xED;"; "í"] ;
    ["&#xEE;"; "î"] ;
    ["&#xEF;"; "ï"] ;
    ["&#xF0;"; "ð"] ;
    ["&#xF1;"; "ñ"] ;
    ["&#xF2;"; "ò"] ;
    ["&#xF3;"; "ó"] ;
    ["&#xF4;"; "ô"] ;
    ["&#xF5;"; "õ"] ;
    ["&#xF6;"; "ö"] ;
    ["&#xF7;"; "÷"] ;
    ["&#xF8;"; "ø"] ;
    ["&#xF9;"; "ù"] ;
    ["&#xFA;"; "ú"] ;
    ["&#xFB;"; "û"] ;
    ["&#xFC;"; "ü"] ;
    ["&#xFD;"; "ý"] ;
    ["&#xFE;"; "þ"] ;
    ["&#xFF;"; "ÿ"] ;
    ["&#x192;"; "ƒ"] ;
    ["&#x391;"; "&#913;"] ;
    ["&#x392;"; "&#914;"] ;
    ["&#x393;"; "&#915;"] ;
    ["&#x394;"; "&#916;"] ;
    ["&#x395;"; "&#917;"] ;
    ["&#x396;"; "&#918;"] ;
    ["&#x397;"; "&#919;"] ;
    ["&#x398;"; "&#920;"] ;
    ["&#x399;"; "&#921;"] ;
    ["&#x39A;"; "&#922;"] ;
    ["&#x39B;"; "&#923;"] ;
    ["&#x39C;"; "&#924;"] ;
    ["&#x39D;"; "&#925;"] ;
    ["&#x39E;"; "&#926;"] ;
    ["&#x39F;"; "&#927;"] ;
    ["&#x3A0;"; "&#928;"] ;
    ["&#x3A1;"; "&#929;"] ;
    ["&#x3A3;"; "&#931;"] ;
    ["&#x3A4;"; "&#932;"] ;
    ["&#x3A5;"; "&#933;"] ;
    ["&#x3A6;"; "&#934;"] ;
    ["&#x3A7;"; "&#935;"] ;
    ["&#x3A8;"; "&#936;"] ;
    ["&#x3A9;"; "&#937;"] ;
    ["&#x3B1;"; "&#945;"] ;
    ["&#x3B2;"; "&#946;"] ;
    ["&#x3B3;"; "&#947;"] ;
    ["&#x3B4;"; "&#948;"] ;
    ["&#x3B5;"; "&#949;"] ;
    ["&#x3B6;"; "&#950;"] ;
    ["&#x3B7;"; "&#951;"] ;
    ["&#x3B8;"; "&#952;"] ;
    ["&#x3B9;"; "&#953;"] ;
    ["&#x3BA;"; "&#954;"] ;
    ["&#x3BB;"; "&#955;"] ;
    ["&#x3BC;"; "&#956;"] ;
    ["&#x3BD;"; "&#957;"] ;
    ["&#x3BE;"; "&#958;"] ;
    ["&#x3BF;"; "&#959;"] ;
    ["&#x3C0;"; "&#960;"] ;
    ["&#x3C1;"; "&#961;"] ;
    ["&#x3C2;"; "&#962;"] ;
    ["&#x3C3;"; "&#963;"] ;
    ["&#x3C4;"; "&#964;"] ;
    ["&#x3C5;"; "&#965;"] ;
    ["&#x3C6;"; "&#966;"] ;
    ["&#x3C7;"; "&#967;"] ;
    ["&#x3C8;"; "&#968;"] ;
    ["&#x3C9;"; "&#969;"] ;
    ["&#x3D1;"; "&#977;"] ;
    ["&#x3D2;"; "&#978;"] ;
    ["&#x3D6;"; "&#982;"] ;
    ["&#x2022;"; "•"] ;
    ["&#x2026;"; "..."] ;
    ["&#x2032;"; "&#8242;"] ;
    ["&#x2033;"; "&#8243;"] ;
    ["&#x203E;"; "&#8254;"] ;
    ["&#x2044;"; "&#8260;"] ;
    ["&#x2118;"; "&#8472;"] ;
    ["&#x2111;"; "&#8465;"] ;
    ["&#x211C;"; "&#8476;"] ;
    ["&#x2122;"; "™"] ;
    ["&#x2135;"; "&#8501;"] ;
    ["&#x2190;"; "&#8592;"] ;
    ["&#x2191;"; "&#8593;"] ;
    ["&#x2192;"; "&#8594;"] ;
    ["&#x2193;"; "&#8595;"] ;
    ["&#x2194;"; "&#8596;"] ;
    ["&#x21B5;"; "&#8629;"] ;
    ["&#x21D0;"; "&#8656;"] ;
    ["&#x21D1;"; "&#8657;"] ;
    ["&#x21D2;"; "&#8658;"] ;
    ["&#x21D3;"; "&#8659;"] ;
    ["&#x21D4;"; "&#8660;"] ;
    ["&#x2200;"; "&#8704;"] ;
    ["&#x2202;"; "&#8706;"] ;
    ["&#x2203;"; "&#8707;"] ;
    ["&#x2205;"; "&#8709;"] ;
    ["&#x2207;"; "&#8711;"] ;
    ["&#x2208;"; "&#8712;"] ;
    ["&#x2209;"; "&#8713;"] ;
    ["&#x220B;"; "&#8715;"] ;
    ["&#x220F;"; "&#8719;"] ;
    ["&#x2211;"; "&#8721;"] ;
    ["&#x2212;"; "&#8722;"] ;
    ["&#x2217;"; "&#8727;"] ;
    ["&#x221A;"; "&#8730;"] ;
    ["&#x221D;"; "&#8733;"] ;
    ["&#x221E;"; "&#8734;"] ;
    ["&#x2220;"; "&#8736;"] ;
    ["&#x2227;"; "&#8743;"] ;
    ["&#x2228;"; "&#8744;"] ;
    ["&#x2229;"; "&#8745;"] ;
    ["&#x222A;"; "&#8746;"] ;
    ["&#x222B;"; "&#8747;"] ;
    ["&#x2234;"; "&#8756;"] ;
    ["&#x223C;"; "&#8764;"] ;
    ["&#x2245;"; "&#8773;"] ;
    ["&#x2248;"; "&#8776;"] ;
    ["&#x2260;"; "&#8800;"] ;
    ["&#x2261;"; "&#8801;"] ;
    ["&#x2264;"; "&#8804;"] ;
    ["&#x2265;"; "&#8805;"] ;
    ["&#x2282;"; "&#8834;"] ;
    ["&#x2283;"; "&#8835;"] ;
    ["&#x2284;"; "&#8836;"] ;
    ["&#x2286;"; "&#8838;"] ;
    ["&#x2287;"; "&#8839;"] ;
    ["&#x2295;"; "&#8853;"] ;
    ["&#x2297;"; "&#8855;"] ;
    ["&#x22A5;"; "&#8869;"] ;
    ["&#x22C5;"; "&#8901;"] ;
    ["&#x2308;"; "&#8968;"] ;
    ["&#x2309;"; "&#8969;"] ;
    ["&#x230A;"; "&#8970;"] ;
    ["&#x230B;"; "&#8971;"] ;
    ["&#x2329;"; "&#9001;"] ;
    ["&#x232A;"; "&#9002;"] ;
    ["&#x25CA;"; "&#9674;"] ;
    ["&#x2660;"; "&#9824;"] ;
    ["&#x2663;"; "&#9827;"] ;
    ["&#x2665;"; "&#9829;"] ;
    ["&#x2666;"; "&#9830;"]
)) ;
$HTMLencoded2Text_depth = $HTMLencoded2Text_depth + 1 ;
_finalresult = Case ( not Position ( _text ; "&#"; 1; 1 ) ; _text ;
    Let ([
        _pos = Position ( _text ; "&#" ; 1 ; 1 ) ;
        _pos2 = Position ( _text ; ";" ; _pos ; 1 ) - _pos ;
        _word = Middle ( _text ; _pos ; _pos2 + 1 ) ;
        _isCode = Length ( _word ) >= 4 and Length ( _word ) <= 8 and Substitute ( _word ; [ 0 ; "" ] ; [ 1 ; "" ] ; [ 2 ; "" ] ; [ 3 ; "" ] ; [ 4 ; "" ] ; [ 5 ; "" ] ; [ 6 ; "" ] ; [ 7 ; "" ] ; [ 8 ; "" ] ; [ 9 ; "" ]) = "&#;" ;
        _result = Left ( _text ; _pos - 1 ) & Case ( _isCode ; Char ( GetAsNumber ( _word )) ; "&" )
        ];
        _result & HTMLencoded2Text ( Right ( _text ; Length ( _text ) - ( _pos + Case ( _isCode ; Length ( _word ) - 1 ))))
        ));
    $HTMLencoded2Text_depth = $HTMLencoded2Text_depth - 1
];
    _finalresult
)




Så er spørgsmålet bare, lige hvordan jeg bedst muligt implementerer funktionen i filemaker. Er der en smartere metode end at lave en nyt beregnet felt med funktionen i?
Avatar billede mr.malmros Juniormester
27. oktober 2014 - 12:32 #6
Smid et svar, Soholm :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester