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

Finde informationer fra XML

Hej jeg har et system med en Web Service, som når den for sin Værdi i dette tilfælde et nummer, sender vidre til en Server, og tilbage for jeg i min Windows Application, en masse XML..

Jeg har ikke arbejdet fandes meget i mit liv med XML, og det har kun været med en Fast fil, i dette system skal XML informationerne helst ikke gemmes, måske kun i Memory som max, da det er følsomme informationer.

XML'en jeg for tilbage ser således ud.

<Gctp v="1.0" env="Demo">
    <System r="Soeg">
      <Service r="STAM">
        <CprServiceHeader r="STAM" ts="000000000000000000"/>
        <CprData u="O">
          <Rolle r="HovedRolle">
            <Praes r="STAMPNR">
              <Field r="PNR" v="00000000"/>
              <Field r="I_VENT_MRK"/>
              <Field r="ADRNVN" v="Navn" t="Navn"/>
              <Field r="KOEN" v="K"/>
              <Field r="STATUS" v="90" t="Død"/>
              <Field r="STARTDATOSTATUS" v="00000000"/>
              <Field r="PNRGAELD"/>
              <Field r="FOEDDATO" v="00000000"/>
            </Praes>
          </Rolle>
        </CprData>
        <Kvit r="Ok" t="" v="0"/>
      </Service>
    </System>
  </Gctp>

Har i nogle metoder til at få disse informationer delt op i forskællige (Lables).

Jeg håber det gav nogen form for mening.
Avatar billede meganight Nybegynder
11. december 2008 - 13:10 #1
Ahh for Filan, troede jeg havde skrevet det..
Men det jeg vil have tilbage, er dem der pænt nok er skrevet i <Field />
som f. eks. <Field r="ADRNVN" v="Navn" t="Navn"/>
Vil jeg gerne have Navn i min Lable.
Avatar billede kalp Novice
11. december 2008 - 13:32 #2
Du bliver nød til at parse det og mappe de forskellige fields til de labels de nu tilhøre.
Benyt XmlDocument til det.
Avatar billede meganight Nybegynder
11. december 2008 - 13:39 #3
Hmm ja det var en mulighed..
Kan du give mig et Eksemple på det?
Avatar billede aaberg Nybegynder
11. december 2008 - 13:40 #4
Du kan bruge XmlDocument klassen og XPath.

Hvis du har xml'en liggende i en streng, skrive du.
XmlDocument doc = new XmlDocument();
doc.LoadXml(theXmlString);


For at finde v attributten i <Field r="PNR" v="00000000"/> elementet, skriver du:

XmlNode theVAttribute = doc.Select("//Field[@R='PNR']/@v);
string v = theVAttribute.Value;
Avatar billede aaberg Nybegynder
11. december 2008 - 13:44 #5
Hov, der mangler en " i Select metoden:
XmlNode theVAttribute = doc.Select("//Field[@R='PNR']/@v");

For mere læsning, kan du finde en guide til XPath her:
http://w3schools.com/xpath/default.asp
Avatar billede kalp Novice
11. december 2008 - 14:46 #6
prøv denne console app.


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

namespace ConsoleApplication8 {
    class Program {
        static void Main(string[] args) {
            string xml = @"<Gctp v=""1.0"" env=""Demo"">
                            <System r=""Soeg"">
                              <Service r=""STAM"">
                                <CprServiceHeader r=""STAM"" ts=""000000000000000000""/>
                                <CprData u=""O"">
                                  <Rolle r=""HovedRolle"">
                                    <Praes r=""STAMPNR"">
                                      <Field r=""PNR"" v=""00000000""/>
                                      <Field r=""I_VENT_MRK""/>
                                      <Field r=""ADRNVN"" v=""Navn"" t=""Navn""/>
                                      <Field r=""KOEN"" v=""K""/>
                                      <Field r=""STATUS"" v=""90"" t=""Død"" />
                                      <Field r=""STARTDATOSTATUS"" v=""00000000"" />
                                      <Field r=""PNRGAELD""/>
                                      <Field r=""FOEDDATO"" v=""00000000"" />
                                    </Praes>
                                  </Rolle>
                                </CprData>
                              </Service>
                            </System>
                          </Gctp>";

            XmlDocument document = new XmlDocument();
            document.LoadXml(xml);
            XmlNodeList fields = document.SelectNodes("/Gctp/System/Service/CprData/Rolle/Praes/Field");
            foreach (XmlNode field in fields) {
                //du kan lave en case i denne switch for hver field type du har:)
                switch (field.Attributes["r"].Value) {
                    case "STATUS": {
                        //her kunne du skrive til en label f.eks
                            Console.WriteLine("V = : {0}, T = :{1} for {2}", field.Attributes["v"].Value, field.Attributes["t"].Value, field.Attributes["r"].Value);
                            break;
                        }
                    case "ADRNVN": {
                            //her kunne du skrive til en label f.eks
                            Console.WriteLine("V = : {0}, T = :{1} for {2}", field.Attributes["v"].Value, field.Attributes["t"].Value, field.Attributes["r"].Value);
                            break;
                        }
                }
            }
            Console.Read();
        }
    }
}
Avatar billede meganight Nybegynder
11. december 2008 - 14:55 #7
Jeg acceptere dit svar Kalp, det var lige hvad jeg ledte efter..
Kan sagtens rette din Consol App til hvad jeg skal bruge... jeg takker mange gange for jeres hjælp
Avatar billede meganight Nybegynder
11. december 2008 - 14:58 #8
Kom nu virk...
Avatar billede kalp Novice
11. december 2008 - 15:00 #9
Du skal først markere mit navn i boksen nede i venstre hjørne før du trykker på accepter svar:)

og selv tak:)
Avatar billede meganight Nybegynder
11. december 2008 - 15:20 #10
Hehe.. det tog lige et minut eller 2 at finde ud af :D.
Igen tak for hjælpen, du fik også dine Poing.
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