Avatar billede meganight Nybegynder
12. december 2008 - 13:38 Der er 11 kommentarer og
1 løsning

String Manipulering

Heh.. man for noget til at virke og nogt andet går galt..
Jeg skal have formateret en XML jeg for tilbage fra min Web Service, praktisk talt så giver den mig 45 Linjer jeg ikke har brug for ej eller vil have, jeg kan desværre ikke rette i hvad jeg for det er fast..

Jeg vil derfor gerne skære noget af stringen / XML'en fra, alsår de første 45 Linjer.

Jeg smider lige et Eksemple, så i har lidt at arbejde med.
   
[Væk] <System r="">
      <Service r="STAM">
        <CprServiceHeader r="STAM">
          <Key>
            <Field r="PNR" v=""/>
          </Key>
        </CprServiceHeader>
      </Service>
    </System>
  </Gctp>
</root>Buffering: TrueHttp headers i respons til service request: Pragma: no-cache
Connection: Keep-Alive
Content-Length: 00001080
Content-Type: text/xml
Date: Mon, 12 Mar 2008 13:02:21 GMT
Expires: Mon, 12 Mar 2008 00:00:02 GMT [Væk]

(Have) <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?><root xmlns="">
  <Gctp v="1.0" env="Demo">
    <System r="CprSoeg">
      <Service r="STAM">
        <CprServiceHeader r="STAM" ts=""/>
        <CprData u="O">
          <Rolle r="HovedRolle">
            <Praes r="STAMPNR">
              <Field r="PNR" v=""/>
              <Field r="I_VENT_MRK"/>
              <Field r="ADRNVN" v="Jakobsen,Adam" t="Adam Jakobsen"/>
              <Field r="KOEN" v="M"/>
              <Field r="STATUS" v="80" t="Udrejst"/>
              <Field r="STARTDATOSTATUS" v=""/>
            </Praes>
          </Rolle>
        </CprData>
        <Kvit r="Ok" t="" v="0"/>
      </Service>
    </System>
  </Gctp>
</root> (Have)

Det er en lille Ophugning af det jeg for, men det jeg vil have er det lille Dejlige XML Stykke med Fieldsne i.
Så hvordan for jeg Manipuleret min String til at kun give mig det ?
Avatar billede kalp Novice
12. december 2008 - 13:42 #1
load det ind i et XmlDocument og træk dem ud med Xpath
Avatar billede kalp Novice
12. december 2008 - 13:43 #2
som du har fået hjælp til tidligere:S
Avatar billede kalp Novice
12. december 2008 - 13:44 #3
hvis du vil have det som en string kan du gøre sådan her

string xml = document.SelectSingleNode("//Praes").OuterXml;

hvis vi forestiller dig document er dit xml document.
Avatar billede meganight Nybegynder
12. december 2008 - 13:46 #4
Jeg har desværre det problem, at den går lidt amok over det..
Der kommer nemlig 3 forskællige XML stringe ind i min XmlDocument, plus clear tekts..
Hvilket gir mig en dejlig fejl "Data at the root level is invalid. Line 1, position 1.".

Din kode i går virkede fint, som den skulle.

Mit sprøgsmål er til at få fjernet alt det ubrulige før den XML string som jeg skal bruge.
Avatar billede kalp Novice
12. december 2008 - 14:08 #5
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication9 {
    class Program {
        static void Main(string[] args) {


        string xml =    @"<Gctp v=""1.0"" env=""Demo"">
    <System r=""CprSoeg"">
      <Service r=""STAM"">
        <CprServiceHeader r=""STAM"" ts=""""/>
        <CprData u=""O"">
          <Rolle r=""HovedRolle"">
            <Praes r=""STAMPNR"">
              <Field r=""PNR"" v=""""/>
              <Field r=""I_VENT_MRK""/>
              <Field r=""ADRNVN"" v=""Jakobsen,Adam"" t=""Adam Jakobsen""/>
              <Field r=""KOEN"" v=""M""/>
              <Field r=""STATUS"" v=""80"" t=""Udrejst""/>
              <Field r=""STARTDATOSTATUS"" v=""""/>
            </Praes>
          </Rolle>
        </CprData>
        <Kvit r=""Ok"" t="""" v=""0""/>
      </Service>
    </System>
  </Gctp>
</root>";

        Regex reg = new Regex("<Field.*/>");
        MatchCollection fields =  reg.Matches(xml);
        StringBuilder output = new StringBuilder();
        foreach (Match match in fields) {
            output.AppendLine(match.Value);
        }
        Console.Write(output.ToString());
        Console.Read();
        }
    }
}
Avatar billede kalp Novice
12. december 2008 - 14:11 #6
sådan her hvis du vil have dem i et XML document.

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;

namespace ConsoleApplication9 {
    class Program {
        static void Main(string[] args) {


        string xml =    @"<Gctp v=""1.0"" env=""Demo"">
    <System r=""CprSoeg"">
      <Service r=""STAM"">
        <CprServiceHeader r=""STAM"" ts=""""/>
        <CprData u=""O"">
          <Rolle r=""HovedRolle"">
            <Praes r=""STAMPNR"">
              <Field r=""PNR"" v=""""/>
              <Field r=""I_VENT_MRK""/>
              <Field r=""ADRNVN"" v=""Jakobsen,Adam"" t=""Adam Jakobsen""/>
              <Field r=""KOEN"" v=""M""/>
              <Field r=""STATUS"" v=""80"" t=""Udrejst""/>
              <Field r=""STARTDATOSTATUS"" v=""""/>
            </Praes>
          </Rolle>
        </CprData>
        <Kvit r=""Ok"" t="""" v=""0""/>
      </Service>
    </System>
  </Gctp>
</root>";

        Regex reg = new Regex("<Field.*/>");
        MatchCollection fields =  reg.Matches(xml);
        StringBuilder output = new StringBuilder();
        foreach (Match match in fields) {
            output.AppendLine(match.Value);
        }
        string newXml = string.Format("<Fields>{0}</Fields>", output.ToString());
        XmlDocument document = new XmlDocument();
        document.LoadXml(newXml);
        Console.Write(document.OuterXml);
        Console.Read();
        }
    }
}
Avatar billede meganight Nybegynder
12. december 2008 - 14:22 #7
Jeg tror desværre vi snakker lidt forbi hinannen, eller at jeg ikke forklare det godt nok.
Du skriver en Applikation hvor du har taget det Stykket XML som jeg gerne vil have og bruger det..

Sådan kan mit Program ikke virke, det jeg for tilbage fra min Wep Service ser sådan her ud.. En masse tekst.


The Http RequestHeaders are User-Agent: CPR/1.0

Connection: Uri: <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?><root xmlns="">
  <Gctp v="1.0">
    <Sik function= "" userid="" password=""/>
  </Gctp>
</root>Buffering: TrueHttp Response Headers: Pragma: no-cache
Connection: Keep-Alive
Content-Length: 000000000000182
Content-Type: text/xml
Date: Fri, 12 Dec 2008 12:02:21 GMT
Expires: 0
Set-Cookie: Token=ZZZGDNLPHWB ; Path=/
Server: IBM_CICS_Transaction_Server/3.1.0(zOS)

Følgende headers modtaget i response:
Header Navn:,PragmaVærdi :no-cache
Header Navn:,ConnectionVærdi :Keep-Alive
Header Navn:,Content-LengthVærdi :000000000000182
Header Navn:,Content-TypeVærdi :text/xml
Header Navn:,DateVærdi :Fri, 12 Dec 2008 12:02:21 GMT
Header Navn:,ExpiresVærdi :0
Header Navn:,Set-CookieVærdi :Token=ZZZGDNLPHWB ; Path=/
Header Navn:,ServerVærdi :IBM_CICS_Transaction_Server/3.1.0(zOS)Service request headers User-Agent: CPR/1.0
Cookie: Token=ZZZGDNLPHWB

Service request forbindelse: Uri:  adresse: <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?><root xmlns="http://www.cpr.dk">
  <Gctp v="1.0">
    <System r="CprSoeg">
      <Service r="STAM">
        <CprServiceHeader r="STAM">
          <Key>
            <Field r="PNR" v=""/>
          </Key>
        </CprServiceHeader>
      </Service>
    </System>
  </Gctp>
</root>Buffering: TrueHttp headers i respons til service request: Pragma: no-cache
Connection: Keep-Alive
Content-Length: 00001080
Content-Type: text/xml
Date: Mon, 12 Mar 2008 13:02:21 GMT
Expires: Mon, 12 Mar 2008 00:00:02 GMT

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?><root xmlns="">
  <Gctp v="1.0" env="Demo">
    <System r="CprSoeg">
      <Service r="STAM">
        <CprServiceHeader r="STAM" ts=""/>
        <CprData u="O">
          <Rolle r="HovedRolle">
            <Praes r="STAMPNR">
              <Field r="PNR" v=""/>
              <Field r="I_VENT_MRK"/>
              <Field r="ADRNVN" v="Jakobsen,Adam" t="Adam Jakobsen"/>
              <Field r="KOEN" v="M"/>
              <Field r="STATUS" v="80" t="Udrejst"/>
              <Field r="STARTDATOSTATUS" v=""/>
              <Field r="PNRGAELD"/>
              <Field r="FOEDDATO" v=""/>
              <Field r="FOEDDATOUSM"/>
              <Field r="BESKYT"/>
              <Field r="CONVN"/>
              <Field r="ETAGE"/>
              <Field r="HUSNR"/>
              <Field r="SIDEDOER"/>
              <Field r="BNR"/>
              <Field r="KOMKOD"/>
              <Field r="VEJKOD"/>
              <Field r="BYNVN"/>
              <Field r="LOKALITET"/>
              <Field r="POSTNR"/>
              <Field r="UDR_LANDEKOD" v="5110" t="Norge"/>
              <Field r="UDLANDSADR1" v="Hagagata 24"/>
              <Field r="UDLANDSADR2" v="0653 Oslo"/>
              <Field r="UDLANDSADR3" v="Norge"/>
              <Field r="UDLANDSADR4"/>
              <Field r="UDLANDSADR5"/>
              <Field r="STADR" v="Udrejst"/>
            </Praes>
          </Rolle>
        </CprData>
        <Kvit r="Ok" t="" v="0"/>
      </Service>
    </System>
  </Gctp>
</root>


Jeg har brug for, at når programmet henter den her lange gang (Undskyld udtrykket) lort, så skal jeg har skåret det fra jeg ikke kan bruge, så jeg kune står tilbage med den del, med de brugbare informationer.

Er det til at forstå eller er jeg helt ude i marken ?
Avatar billede arne_v Ekspert
12. december 2008 - 14:51 #8
Put din store String ind i en StringReader, kald ReadLine på den, smid det væk du ikke skal bruge
og process det du skal bruge.
Avatar billede kalp Novice
12. december 2008 - 14:52 #9
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using System.IO;

namespace ConsoleApplication9 {
    class Program {
        static void Main(string[] args) {


        string xml =    @"The Http RequestHeaders are User-Agent: CPR/1.0
Connection: Uri: <?xml version=""1.0"" encoding=""ISO-8859-1"" standalone=""yes""?><root xmlns="""">
  <Gctp v=""1.0"">
    <Sik function= """" userid="""" password=""""/>
  </Gctp>
</root>Buffering: TrueHttp Response Headers: Pragma: no-cache
Connection: Keep-Alive
Content-Length: 000000000000182
Content-Type: text/xml
Date: Fri, 12 Dec 2008 12:02:21 GMT
Expires: 0
Set-Cookie: Token=ZZZGDNLPHWB ; Path=/
Server: IBM_CICS_Transaction_Server/3.1.0(zOS)

Følgende headers modtaget i response:
Header Navn:,PragmaVærdi :no-cache
Header Navn:,ConnectionVærdi :Keep-Alive
Header Navn:,Content-LengthVærdi :000000000000182
Header Navn:,Content-TypeVærdi :text/xml
Header Navn:,DateVærdi :Fri, 12 Dec 2008 12:02:21 GMT
Header Navn:,ExpiresVærdi :0
Header Navn:,Set-CookieVærdi :Token=ZZZGDNLPHWB ; Path=/
Header Navn:,ServerVærdi :IBM_CICS_Transaction_Server/3.1.0(zOS)Service request headers User-Agent: CPR/1.0
Cookie: Token=ZZZGDNLPHWB

Service request forbindelse: Uri:  adresse:
<?xml version=""1.0"" encoding=""ISO-8859-1"" standalone=""yes""?>
<root xmlns=""http://www.cpr.dk"">
  <Gctp v=""1.0"">
    <System r=""CprSoeg"">
      <Service r=""STAM"">
        <CprServiceHeader r=""STAM"">
          <Key>
            <Field r=""PNR"" v=""""/>
          </Key>
        </CprServiceHeader>
      </Service>
    </System>
  </Gctp>
</root>Buffering: TrueHttp headers i respons til service request: Pragma: no-cache
Connection: Keep-Alive
Content-Length: 00001080
Content-Type: text/xml
Date: Mon, 12 Mar 2008 13:02:21 GMT
Expires: Mon, 12 Mar 2008 00:00:02 GMT

<?xml version=""1.0"" encoding=""ISO-8859-1"" standalone=""yes""?>
<root xmlns="""">
  <Gctp v=""1.0"" env=""Demo"">
    <System r=""CprSoeg"">
      <Service r=""STAM"">
        <CprServiceHeader r=""STAM"" ts=""""/>
        <CprData u=""O"">
          <Rolle r=""HovedRolle"">
            <Praes r=""STAMPNR"">
              <Field r=""PNR"" v=""""/>
              <Field r=""I_VENT_MRK""/>
              <Field r=""ADRNVN"" v=""Jakobsen,Adam"" t=""Adam Jakobsen""/>
              <Field r=""KOEN"" v=""M""/>
              <Field r=""STATUS"" v=""80"" t=""Udrejst""/>
              <Field r=""STARTDATOSTATUS"" v=""""/>
              <Field r=""PNRGAELD""/>
              <Field r=""FOEDDATO"" v=""""/>
              <Field r=""FOEDDATOUSM""/>
              <Field r=""BESKYT""/>
              <Field r=""CONVN""/>
              <Field r=""ETAGE""/>
              <Field r=""HUSNR""/>
              <Field r=""SIDEDOER""/>
              <Field r=""BNR""/>
              <Field r=""KOMKOD""/>
              <Field r=""VEJKOD""/>
              <Field r=""BYNVN""/>
              <Field r=""LOKALITET""/>
              <Field r=""POSTNR""/>
              <Field r=""UDR_LANDEKOD"" v=""5110"" t=""Norge""/>
              <Field r=""UDLANDSADR1"" v=""Hagagata 24""/>
              <Field r=""UDLANDSADR2"" v=""0653 Oslo""/>
              <Field r=""UDLANDSADR3"" v=""Norge""/>
              <Field r=""UDLANDSADR4""/>
              <Field r=""UDLANDSADR5""/>
              <Field r=""STADR"" v=""Udrejst""/>
            </Praes>
          </Rolle>
        </CprData>
        <Kvit r=""Ok"" t="""" v=""0""/>
      </Service>
    </System>
  </Gctp>
</root>";

        StringReader reader = new StringReader(xml);
        StringBuilder builder = new StringBuilder();
            bool startAppend = false;
            while (reader.Peek() != -1) {
                string line = reader.ReadLine();
                if (line.ToLower().Contains(@"<Gctp v=""1.0"" env=""Demo"">".ToLower())) startAppend = true;
                if (startAppend && line.ToLower() != "</root>") builder.AppendLine(line);
        }

        Console.Write(builder.ToString());
        Console.Read();
        }
    }
}
Avatar billede kalp Novice
12. december 2008 - 14:53 #10
men.. siger ikke den er 100% pæn.. sidder bare og laver andre ting også:D
men du kan jo tilpasse den yderligere hvis det er.. den fungere fint nok til det du har posted her i hvertfald.
Avatar billede meganight Nybegynder
12. december 2008 - 15:29 #11
Sådan.. det var jo helt Perfekt Kalp.. igen tak.. Tog lidt tid at få til at forstå for mig, men jeg takker.
Avatar billede kalp Novice
12. december 2008 - 15:49 #12
egentlig kan jeg godt forstå dit spørgsmål når jeg læser det nu:)
men var ikke helt fokuseret..

busy busy hehe men det lykkedes;)
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