Avatar billede alex_sleiborg Nybegynder
13. maj 2006 - 15:50 Der er 13 kommentarer og
1 løsning

Fejl hvis xml node er tom

Jeg har en konfigurations fil til mit program, som er en xml fil. Når mit program starter hiver den automatisk data ud fra den fil, og over i nogle tekstboxe. Men det er ikke sikkert det er alle felter i xml filen, der indeholder data. Er der feks et felt der er tomt, så får jeg fejl

Object reference not set to an instance of an object.

Jeg kan ordne det med en try catch, sådan her

try
                {
                    this.nup_Moms.Text = Moms.ChildNodes[0].InnerText;
                    this.txt_CompanyName.Text = CompanyName.ChildNodes[0].InnerText;
                    this.txt_Adr.Text = Adress.ChildNodes[0].InnerText;
                    this.txt_Postnr.Text = Postnr.ChildNodes[0].InnerText;
                    this.txt_By.Text = By.ChildNodes[0].InnerText;
                    this.txt_Tlf.Text = Tlf.ChildNodes[0].InnerText;
                    this.txt_Mobil.Text = Mobil.ChildNodes[0].InnerText;
                    this.txt_WWW.Text = www.ChildNodes[0].InnerText;
                    this.pct_Logo.Image = Image.FromFile(logo.ChildNodes[0].InnerText);
                }
                catch
                {
                }

Men hvis feks Mobil er tom, så kommer www eller logo noden ikke
med. Hvordan laver jeg det?
Avatar billede arne_v Ekspert
13. maj 2006 - 16:16 #1
du får vel en exception, ryger i catch og den bliver ikke sat

du tester enten for om den eksisterer og forsøger kun at hente hvis den gør
eller putter try catch omkring hver enkelt
Avatar billede alex_sleiborg Nybegynder
13. maj 2006 - 16:18 #2
ja havde tænkt på at komme en try catch om hver enkelt. Men er det en okay løsning?
Avatar billede arne_v Ekspert
13. maj 2006 - 16:25 #3
jeg ville vælge at teste
Avatar billede alex_sleiborg Nybegynder
13. maj 2006 - 16:58 #4
Gider du kommer med et ekspemel

Her er min nuværende kode

XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.Load(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Configuration.xml"));
                XmlNode Moms = xmlDocument.SelectSingleNode("/FirmaData/Moms/MomsProcent");
                XmlNode CompanyName = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/FirmaNavn");
                XmlNode Adress = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/Adresse");
                XmlNode Postnr = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/Postnr");
                XmlNode By = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/By");
                XmlNode Tlf = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/Tlf");
                XmlNode Mobil = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/Mobil");
                XmlNode www = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/Hjemmeside");
                XmlNode logo = xmlDocument.SelectSingleNode("/FirmaData/Logo/LogoSti");

                try
                {
                    this.nup_Moms.Text = Moms.ChildNodes[0].InnerText;
                    this.txt_CompanyName.Text = CompanyName.ChildNodes[0].InnerText;
                    this.txt_Adr.Text = Adress.ChildNodes[0].InnerText;
                    this.txt_Postnr.Text = Postnr.ChildNodes[0].InnerText;
                    this.txt_By.Text = By.ChildNodes[0].InnerText;
                    this.txt_Tlf.Text = Tlf.ChildNodes[0].InnerText;
                    this.txt_Mobil.Text = Mobil.ChildNodes[0].InnerText;
                    this.txt_WWW.Text = www.ChildNodes[0].InnerText;
                    this.pct_Logo.Image = Image.FromFile(logo.ChildNodes[0].InnerText);
                }
                catch
                {
                }
Avatar billede arne_v Ekspert
13. maj 2006 - 18:07 #5
this.txt_By.Text = By.ChildNodes[0].InnerText;

->

if(By != null) this.txt_By.Text = By.ChildNodes[0].InnerText;
Avatar billede arne_v Ekspert
13. maj 2006 - 18:07 #6
o.s.v.
Avatar billede alex_sleiborg Nybegynder
13. maj 2006 - 20:06 #7
Jeg får stadig den samme fejl, hvis den er ikke indeholder noget

          XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.Load(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Configuration.xml"));
                XmlNode Moms = xmlDocument.SelectSingleNode("/FirmaData/Moms/MomsProcent");
                XmlNode CompanyName = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/FirmaNavn");
                XmlNode Adress = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/Adresse");
                XmlNode Postnr = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/Postnr");
                XmlNode By = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/By");
                XmlNode Tlf = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/Tlf");
                XmlNode Mobil = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/Mobil");
                XmlNode www = xmlDocument.SelectSingleNode("/FirmaData/FirmaOplysninger/Hjemmeside");
                XmlNode logo = xmlDocument.SelectSingleNode("/FirmaData/Logo/LogoSti");

               
                    this.nup_Moms.Text = Moms.ChildNodes[0].InnerText;
                    if(CompanyName != null)this.txt_CompanyName.Text = CompanyName.ChildNodes[0].InnerText;
                    if(Adress != null) this.txt_Adr.Text = Adress.ChildNodes[0].InnerText;
                    if(Postnr != null) this.txt_Postnr.Text = Postnr.ChildNodes[0].InnerText;
                    if(By != null) this.txt_By.Text = By.ChildNodes[0].InnerText;
                    if(Tlf != null) this.txt_Tlf.Text = Tlf.ChildNodes[0].InnerText;
                    if(Mobil != null) this.txt_Mobil.Text = Mobil.ChildNodes[0].InnerText;
                    if(www != null) this.txt_WWW.Text = www.ChildNodes[0].InnerText;
                    if(logo != null) this.pct_Logo.Image = Image.FromFile(logo.ChildNodes[0].InnerText);
Avatar billede arne_v Ekspert
13. maj 2006 - 21:17 #8
har du et tomt tag ?

<Mobil/>

?
Avatar billede arne_v Ekspert
13. maj 2006 - 21:18 #9
og hvilken linie kommer fejlen i ?
Avatar billede alex_sleiborg Nybegynder
13. maj 2006 - 21:22 #10
Den kommer bare med den fejl ligesom sidst, det ændrer ikke noget at jeg har en if foran

Object reference not set to an instance of an object.
Avatar billede alex_sleiborg Nybegynder
13. maj 2006 - 21:41 #11
Sådan her ser min xml fil ud

<?xml version="1.0" encoding="utf-8"?>
<FirmaData>
  <Moms>
    <MomsProcent>21</MomsProcent>
  </Moms>
  <FirmaOplysninger>
    <FirmaNavn>gtht</FirmaNavn>
    <Adresse>rgrg</Adresse>
    <Postnr>4344</Postnr>
    <By>err</By>
    <Tlf>
    </Tlf>
    <Mobil>34433</Mobil>
    <Hjemmeside>
    </Hjemmeside>
  </FirmaOplysninger>
  <Logo>
    <LogoSti>C:\Documents and Settings\Administrator\Dokumenter\Billeder\250px-Spice_Girls_Gallery.jpg</LogoSti>
  </Logo>
</FirmaData>
Avatar billede arne_v Ekspert
13. maj 2006 - 21:51 #12
if(Tlf != null)

->

if(Tlf != null && Tlf.HasChildNodes)

o.s.v.
Avatar billede alex_sleiborg Nybegynder
14. maj 2006 - 10:37 #13
Nu virker det. Mange tak for svaret arne. Smid et svar :)
Avatar billede arne_v Ekspert
14. maj 2006 - 15:16 #14
kommer her
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