Avatar billede starf Nybegynder
01. november 2011 - 17:58 Der er 22 kommentarer og
1 løsning

vbscript + regexp til at fjerne alt xml fra en fil

Jeg har et vbscript der henter et rss feed ned, og gemmer det i en fil med xml data.

Hvordan får man vbscript, til at gå igennem den fil, fjerne ALT xml kode, og gemme den igen så der kun er teksten fra feedet?
Avatar billede Syska Mester
01. november 2011 - 18:18 #1
Det bliver da noget rod, hvis der er mere end et element.

Dette er C# kategorien.

Hvordan ser dit dokument ud?

mvh
Avatar billede starf Nybegynder
01. november 2011 - 18:24 #2
hov min fejl, men om det er et c# eller et vbscript er for mig lige meget ;)

her er et eksempel på hvordan dokumentet ser ud:

<?xml version="1.0" encoding="UTF-8"?>
<!--RSS oprettet af Microsoft SharePoint Foundation RSS Generator på 25-10-2011 12:10:05 -->
<?xml-stylesheet type="text/xsl" href="/it/_layouts/RssXslt.aspx?List=3b1cd876-e94a-4091-81e9-fe55f508e1e0" version="1.0"?>
<rss version="2.0">
  <channel>
    <title>It &amp; Telefoni: Hvor er vi</title>
    <link>http://portal-adm-01/it/Lists/Hvor er vi/AllItems.aspx</link>
    <description>RSS-kilde for listen Hvor er vi.</description>
    <lastBuildDate>Tue, 25 Oct 2011 10:10:05 GMT</lastBuildDate>
    <generator>Microsoft SharePoint Foundation RSS Generator</generator>
    <ttl>60</ttl>
    <language>da-DK</language>
    <image>
      <title>It &amp; Telefoni: Hvor er vi</title>
      <url>http://portal-adm-01/it/_layouts/images/siteIcon.png</url>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/AllItems.aspx</link>
    </image>
Avatar billede Syska Mester
01. november 2011 - 18:42 #3
Men ...

Er det ikke rimeligt trist at have alt det som tekst. Det kan da ikke give meget nytte.

Kan du ikke bare tage et XDocument i .NET og så loop alle nodes og attributes igennem eller er du slet ikke udvikler ?

( Lidt svært at vide hvad dine egenskaber er )

VBscript != C#

C# skal compiles før det kan bruges, det skal VBS ikke, da det er et scripting sprog.
Avatar billede starf Nybegynder
01. november 2011 - 18:52 #4
jeg er godt klar over forskellen, men om det bliver et c# program der gør det, eller et vbscript betyder intet for mig.

problemet ligger i at det skal bruges i forbindelse med noget scala infoskærm, og det system æder kun rå txt filer.

mine kode egenskaber er skal vi sige middel, jeg kan som regel godt strikse ting sammen af klodser, hvis jeg ser det.
Avatar billede Syska Mester
01. november 2011 - 19:06 #5
Well ... kan du så ikke lige poste et valid feed.

Hvordan skal din tekst fil se ud? Hvor et element per linje ?

Så vil jeg lave det efterfølgende.

mvh
Avatar billede starf Nybegynder
01. november 2011 - 19:38 #6
feedet kan jeg ikke linke til, da det er intern rss feed. Jeg har dog uploadet den xml fil jeg har trykket ud, som også er den jeg bruger som source.

http://pastebin.com/SXr4fmWd

jeg havde forstillet mig den txt filen bare skulle se sådan her ud:

<title>Jørgen</title>
<link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=18</link>
<description><![CDATA[]]></description>
<author>HJOERRING\d1pelud</author>
<pubDate>Tue, 25 Oct 2011 08:09:45 GMT</pubDate>
<guid isPermaLink="true">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=18</guid>
</item>
<item>
<item>
<title>Jens</title>
<link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=4</link>
<description><![CDATA[Syg]]></description>
<author>HJOERRING\d1pelud</author>
<pubDate>Tue, 25 Oct 2011 08:07:36 GMT</pubDate>
<guid isPermaLink="true">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=4</guid>
</item>

til

Jørgen

Jens
Syg

kort sagt. Titel og description skal bruges, resten skal væk.

giver dette mening?

det vb jeg har der henter xml filen ned og gemmer ser sådan her ud:

Const ForWriting = 2

strURL="http://portal-adm-01/it/_layouts/listfeed.aspx?List=%7B3B1CD876%2DE94A%2D4091%2D81E9%2DFE55F508E1E0%7D&Source=http%3A%2F%2Fportal%2Dadm%2D01%2Fit%2FLists%2FHvor%2520er%2520vi%2FAllItems%2Easpx/"
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
Call objHTTP.Open("GET", strURL, FALSE)
objHTTP.Send

Set objFSO = CreateObject("Scripting.FileSystemObject")


Set objFile = objFSO.CreateTextFile _
    ("C:\Temp\dump.txt", ForWriting)
objFile.Write objHTTP.ResponseText
objFile.Close   


dim response_array : response_array = split (xmlhttp.responseText, vbcr)
Avatar billede Syska Mester
01. november 2011 - 19:47 #7
using System;
using System.Text;
using System.Xml.Linq;

namespace ConsoleApplication3
{
    public class Program
    {
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Parse(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<?xml-stylesheet type=""text/xsl"" href=""/it/_layouts/RssXslt.aspx?List=3b1cd876-e94a-4091-81e9-fe55f508e1e0"" version=""1.0""?>
<rss version=""2.0"">
  <channel>
    <title>It Telefoni Hvor er vi</title>
    <link>http://portal-adm-01/er vi/AllItems.aspx</link>
    <description>RSS-kilde for listen Hvor er vi.</description>
    <lastBuildDate>Tue, 25 Oct 2011 10:10:05 GMT</lastBuildDate>
    <generator>Microsoft SharePoint Foundation RSS Generator</generator>
    <ttl>60</ttl>
    <language>da-DK</language>
    <image>
      <title>It Telefoni: Hvor er vi</title>
    </image>
  </channel>
</rss>
");
            var sb = new StringBuilder();
            foreach (var item in doc.Elements())
            {
                Parse(sb, item);
            }

            Console.WriteLine(sb.ToString());
        }

        private static void Parse(StringBuilder sb, XElement element)
        {
            sb.AppendLine(element.Value);
            foreach (var item in element.Elements())
            {
                Parse(sb, item);
            }
        }
    }
}
Avatar billede Syska Mester
01. november 2011 - 19:56 #8
Her er lidt mere:
using System;
using System.Text;
using System.Xml.Linq;

namespace ConsoleApplication3
{
    public class Program
    {
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Parse(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<!--RSS oprettet af Microsoft SharePoint Foundation RSS Generator på 25-10-2011 12:10:05 -->
<?xml-stylesheet type=""text/xsl"" href=""/it/_layouts/RssXslt.aspx?List=3b1cd876-e94a-4091-81e9-fe55f508e1e0"" version=""1.0""?>
<rss version=""2.0"">
  <channel>
    <title>It &amp; Telefoni: Hvor er vi</title>
    <link>http://portal-adm-01/it/Lists/Hvor er vi/AllItems.aspx</link>
    <description>RSS-kilde for listen Hvor er vi.</description>
    <lastBuildDate>Tue, 25 Oct 2011 10:10:05 GMT</lastBuildDate>
    <generator>Microsoft SharePoint Foundation RSS Generator</generator>
    <ttl>60</ttl>
    <language>da-DK</language>
    <image>
      <title>It &amp; Telefoni: Hvor er vi</title>
      <url>http://portal-adm-01/it/_layouts/images/siteIcon.png</url>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/AllItems.aspx</link>
    </image>
    <item>
      <title>Jørgen</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=18</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:09:45 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=18</guid>
    </item>
    <item>
      <title>Jimmy</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=8</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:08:10 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=8</guid>
    </item>
    <item>
      <title>Per</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=9</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:08:19 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=9</guid>
    </item>
    <item>
      <title>Peter</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=1</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:07:12 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=1</guid>
    </item>
    <item>
      <title>Kim</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=3</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:07:30 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=3</guid>
    </item>
    <item>
      <title>Jens</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=4</link>
      <description><![CDATA[Syg]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:07:36 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=4</guid>
    </item>
    <item>
      <title>Peter</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=2</link>
      <description><![CDATA[25/10 Thisted]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:07:23 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=2</guid>
    </item>
    <item>
      <title>Christian</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=17</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:09:36 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=17</guid>
    </item>
    <item>
      <title>Jan</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=16</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:09:28 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=16</guid>
    </item>
    <item>
      <title>Torben</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=15</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:09:21 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=15</guid>
    </item>
    <item>
      <title>Aksel</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=14</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:09:13 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=14</guid>
    </item>
    <item>
      <title>Helle</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=13</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:09:05 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=13</guid>
    </item>
    <item>
      <title>Jesper</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=12</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:08:56 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=12</guid>
    </item>
    <item>
      <title>Peter</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=11</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:08:36 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=11</guid>
    </item>
    <item>
      <title>Leif</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=10</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:08:28 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=10</guid>
    </item>
    <item>
      <title>Mads</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=7</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:08:02 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=7</guid>
    </item>
    <item>
      <title>Kenth</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=6</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:07:54 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=6</guid>
    </item>
    <item>
      <title>Finn</title>
      <link>http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=5</link>
      <description><![CDATA[]]></description>
      <author>HJOERRING\d1pelud</author>
      <pubDate>Tue, 25 Oct 2011 08:07:47 GMT</pubDate>
      <guid isPermaLink=""true"">http://portal-adm-01/it/Lists/Hvor er vi/DispForm.aspx?ID=5</guid>
    </item>
  </channel>
</rss>

");
           
            foreach (var item in doc.Element("rss").Element(@"channel").Elements("item"))
            {
                string title = item.Element("title").Value;
                string description = item.Element("description").Value;
                Console.WriteLine("Name: {0}, Value: {1}", title, description);
            }
        }
    }
}


Du kan så kigge på StreamWriter sr = new StreamWriter();  når du skal skrive til en fil.
Avatar billede starf Nybegynder
01. november 2011 - 20:06 #9
Tak..

2 ting dog:

1: kan man ikke, gøre noget hen af dette?
XDocument doc = new System.IO.StreamReader(@"c:\\temp\test.txt", System.Text.Encoding.GetEncoding("iso-8859-1"));

det er jo et script der skal køre hver gang tekst filen ændre sig.

2: som jeg ser det printer den stadig alt sammen, altså når jeg køre det får jeg dette:

It Telefoni Hvor er vihttp://portal-adm-01/ (...) vi/AllItems.aspxRSS-kilde for listen Hvor er vi.Tue, 25 Oct 2011 10:10:05 GMTMicrosoft SharePoint Foundation RSS Generator60da-DKIt Telefoni: Hvor er vi
It Telefoni Hvor er vihttp://portal-adm-01/ (...) vi/AllItems.aspxRSS-kilde for listen Hvor er vi.Tue, 25 Oct 2011 10:10:05 GMTMicrosoft SharePoint Foundation RSS Generator60da-DKIt Telefoni: Hvor er vi
It Telefoni Hvor er vi
http://portal-adm-01/ (...) vi/AllItems.aspx
RSS-kilde for listen Hvor er vi.
Tue, 25 Oct 2011 10:10:05 GMT
Microsoft SharePoint Foundation RSS Generator
60
da-DK
It Telefoni: Hvor er vi
It Telefoni: Hvor er vi

skal jo faktisk bare bruge navnet på personen og evt description hvis der er skrevet noget der i...
Avatar billede Syska Mester
01. november 2011 - 20:24 #10
XDocument doc = XDocument.Load()
# Load tager en masse forskellige ting ind.

Se mit forige svar ... StreamWriter eller en af de andre.

De 2 ting du skal have fra din XML fil kan du bare skrive til en StringBuilder og derefter smide den ned i en writer.

mvh
Avatar billede starf Nybegynder
02. november 2011 - 09:09 #11
XDocument doc = XDocument.Load("c:\\temp\\dump.txt");

hvis jeg gør sådan, så får jeg

"Invalid character in the given encoding. Line 2, position 68."

Går ud fra den ikke kan li den xml fil, jeg har ?
http://peecee.dk/upload/view/334578
Avatar billede starf Nybegynder
02. november 2011 - 09:10 #12
<!--RSS oprettet af Microsoft SharePoint Foundation RSS Generator p&#65533; 25-10-2011 12:10:05 -->

det er denne linie den dør ved, er der en måde omkring dette?
Avatar billede starf Nybegynder
02. november 2011 - 09:37 #13
kan det enlig ikke lade sig gøre, at peje den direkte ud på et rss feed, frem for en fil? på den måde kan man undgå at have et script til at lave en xml fil først?
Avatar billede starf Nybegynder
02. november 2011 - 09:58 #14
ser ud til at

            XDocument doc = XDocument.Load("http://site/rss");

virker fint, dog giver det problemer da c# åbenbart køre som en anden user som default, og ikke som den bruger der er logget ind. Hvilke gør det ikke får lov at tilgå resourcen i sharepoint. Så bliver nød til at bruge vb til at hente xml filen, og så køre den igennem c#.. så er tilbage med det problem at det dør ved denne linie i min xml fil.


<!--RSS oprettet af Microsoft SharePoint Foundation RSS Generator p&#65533; 25-10-2011 12:10:05 -->
Avatar billede Syska Mester
02. november 2011 - 10:19 #15
Her er 2 andre måder det kan gøre på. Skal ikke lige kunne sige hvorfor det andet ikke virker ... gør det heller ikke ved mig.

WebClient webClient = new WebClient();
            var downloadString = webClient.DownloadString("url");

            StreamReader reader = new StreamReader(@"C:\test.xml", Encoding.Default);

            var xDocument1 = XDocument.Parse(downloadString);
            var xDocument2 = XDocument.Parse(reader.ReadToEnd());
Avatar billede starf Nybegynder
02. november 2011 - 10:33 #16
Tak så virker det. et sidste spørgsmål, er der en let måde at få et c# program, til at køre med de rettigheder som den indloggede bruger har?
Avatar billede Syska Mester
02. november 2011 - 10:41 #17
Det ville jeg mene det allerede skulle gøre.

Hvordan logger du ind på sharepoint? Bruger den windows credentials ?

http://vspug.com/tmt/2007/12/17/using-webclient-in-sharepoint-context/

webClient.UseDefaultCredentials = true; <- Måske den er false per default.

Ellers er mit eneste svar at du må prøve at google det.
Avatar billede starf Nybegynder
02. november 2011 - 10:51 #18
ja, det er windows credentials. Når jeg tilgår xml fil via c# får jeg en user auth error, gør jeg det via vbscript så er der ingen problemer.

jeg takker dog for din hjælp, smid endelig et svar :)
Avatar billede Syska Mester
02. november 2011 - 11:00 #19
Har du prøvet at sætte den bool på dit WebClient object ?
Avatar billede starf Nybegynder
02. november 2011 - 11:16 #20
jep, men det er nok mig der bruger det forkert.

response = wc.DownloadData("http://portal-adm-01/rss/");

det giver ingen auth fejl, men så sidder jeg fast på hvordan jeg gemmer det osv.
Avatar billede Syska Mester
02. november 2011 - 11:43 #21
Øhh, hvorfor bruger du DownloadData? Du må have set forkert, jeg bruger DownloadString


WebClient webClient = new WebClient();
webClient.UseDefaultCredentials = true;
var downloadString = webClient.DownloadString("url");

mvh
Avatar billede starf Nybegynder
02. november 2011 - 12:49 #22
ja ok, dette virker faktisk :)

endte med dette, og det ser ud til at virke som det skal.

            byte[] response;
            using (WebClient wc = new WebClient())
            {
                bool doappend = false;
                var file = new StreamWriter("C:\\Temp\\it_rss_status.txt", doappend, Encoding.Default);
                WebClient webClient = new WebClient();
                webClient.UseDefaultCredentials = true;
                var downloadString = webClient.DownloadString("http://portal-adm-01/it/_layouts/listfeed.aspx?List=%7B3B1CD876%2DE94A%2D4091%2D81E9%2DFE55F508E1E0%7D&Source=http%3A%2F%2Fportal%2Dadm%2D01%2Fit%2FLists%2FHvor%2520er%2520vi%2FAllItems%2Easpx/");


                Console.WriteLine(downloadString);

               
                XDocument doc = XDocument.Parse(downloadString);
                foreach (var item in doc.Element("rss").Element(@"channel").Elements("item"))
                {
                    string title = item.Element("title").Value;
                    string description = item.Element("description").Value;
                    Console.WriteLine("Navn: {0}, Status: {1}", title, description);
                    file.WriteLine("Navn: {0}, Status: {1}", title, description);

                }
                file.Close();

            }

jeg takker udbydt mange gange for din tolmådighed.
Avatar billede Syska Mester
02. november 2011 - 13:05 #23
Here to help.

mvh
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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