Avatar billede mini-me Nybegynder
16. maj 2007 - 11:17 Der er 4 kommentarer og
1 løsning

XML Data til Listbox

Hej,

Jeg har flg. XML fil:

<?xml version="1.0" encoding="utf-8"?>
<AdressBook>
  <data>
    <Number>4500000000</Number>
    <Name>Hans Peter</Name>
  </data>
  <data>
    <Number>4500000001</Number>
    <Name>Kaj Iver</Name>
  </data>
</AdressBook>

Jeg ønsker så at læse number og name ind i en listbox, jeg har lavet flg. kode:

string filename = "xmlData.xml";
            XmlTextReader tr = new XmlTextReader(filename);

            while (tr.Read())
            {
                if (tr.NodeType == XmlNodeType.Text)
                    eleRecipients.Items.Add(tr.Value);
       

            }

men det virker ikke efter hensigten...
Avatar billede crazysnap Seniormester
16. maj 2007 - 11:29 #1
Hej mini-me,


Hvad med at ændre koden lidt så du bruger en XmlDocument i stedet? Så har man lidt flere muligheder ved xml-filen angår. F.eks. kunne man udføre den handling du ønsker via eksemplet nedenfor:


XmlDocument XmlAddressBook = new XmlDocument();
XmlAddressBook.Load(filename);

XmlNodeList nlXmlAddresses = XmlAddressBook.SelectSingleNode("//AdressBook").ChildNodes;

foreach (XmlNode nXmlData in nlXmlAddresses)
{
    string strNumber = nXmlData.SelectSingleNode(".//Number").InnerText;
    string strName = nXmlData.SelectSingleNode(".//Name").InnerText;

    eleRecipients.Items.Add(strName + " - " + strNumber);
}


Mvh.

- Snap :)
Avatar billede mini-me Nybegynder
16. maj 2007 - 12:06 #2
Får en fejl: Objektreferencen er ikke indstillet til en forekomst af et objekt.

string strNumber = nXmlData.SelectSingleNode(".//Number").InnerText;
Avatar billede crazysnap Seniormester
16. maj 2007 - 12:52 #3
Hej mini-me,

Det lyder meget mærkeligt, jeg har prøvet at teste koden med det xml-script du viser i spørgsmålsbeskrivelsen. Men det tyder på at "Number" node'en ikke eksiterer i dit xml dokument. Kører du det kun på det lille xml-script du har i starten? For koden forudsætter at hver <data>-node indeholder en <Number> og en <Name>-node. Hvis de ikke gør det kan ud f.eks. ændre foreach loop'en til:


foreach (XmlNode nXmlData in nlXmlAddresses)
{
    string strNumber = "";
    string strName = "";

    XmlNode nXmlNumber = nXmlData.SelectSingleNode(".//Number");
   
    if(nXmlNumber != null)
      strNumber = nXmlNumber.InnerText;

    XmlNode nXmlName = nXmlData.SelectSingleNode(".//Name");

    if(nXmlName != null)
      strName = nXmlName .InnerText;

    eleRecipients.Items.Add(strName + " - " + strNumber);
}


Mvh.

- Snap  :)
Avatar billede mini-me Nybegynder
09. november 2007 - 15:32 #4
Jeg fik det aldrig til at virke, men smid et svar som tak for indsatsen :0
Avatar billede crazysnap Seniormester
09. november 2007 - 16:17 #5
Hej mini-me,

Nej det er lidt mærkeligt, men hvis det stadig er aktuelt kan du jo prøve med det her (har ændret det lidt, bare for at prøve noget):


XmlDocument XmlAddressBook = new XmlDocument();
XmlAddressBook.Load(filename);

XmlNodeList nlXmlData = XmlAddressBook.DocumentElement.SelectNodes("//data");

foreach (XmlNode nXmlData in nlXmlData)
{
    string strNumber = nXmlData.SelectSingleNode(".//Number").InnerText;
    string strName = nXmlData.SelectSingleNode(".//Name").InnerText;

    eleRecipients.Items.Add(strName + " - " + strNumber);
}


Mvh.
CS
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