webForumDet fria alternativet

loopa igenom xml-fil

.NETur .NET

2 svar · 527 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Frågan#1

Ska loopa igenom alla undernoder till faq, men det vill inte fungera. Har följande xml-fil:

<faq>
    <test1 roles="Test1, Test2"></test1>
    <test2 roles="Test1, Test2"></test2>
</faq>

Samt min kod:

        ListItem addItem = null;
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.IgnoreComments = true;
        settings.IgnoreWhitespace = true;
        settings.CheckCharacters = false;

        XmlReader reader = XmlReader.Create(Server.MapPath("~/App_Data/Faq.xml"), settings);

        string[] role = Roles.GetRolesForUser();
        string rolename = role[0];
        char[] mysplit = { ',', ' ' };

        while (reader.Read())
        {
            if (reader.AttributeCount > 0)
            {
                string[] noderole = reader.GetAttribute("roles").Split(mysplit);
                    
                foreach (string current in noderole)
                {
                    if (current == rolename)
                    {
                        addItem.Text = reader.Name;
                    }
                }
            }
        }

får felmeddelandet:
Object reference not set to an instance of an object.

tring[] noderole = reader.GetAttribute("roles").Split(mysplit);

Hur löser man detta??

Tacksam för all hjälp :stud

Medlem sedan nov. 20014 054 inlägg
#2

Den hittar inga attribut med namnet roles, och kan därför inte skapa objektet, skulle jag tippa på..

Men sen är jag dålig på tips, så man vet ju inte.. kanske vinner storkovan i alla fall. :)

Medlem sedan sep. 2005833 inlägg
#3

har nu fått det att fungera. Var inte bara under"taggarna" den kollade efter roles på.

Nytt problem:

        while (reader.Read())
        {
            if (reader.AttributeCount > 0)
            {
                string attrValue = reader.GetAttribute("roles");
                
                if (!string.IsNullOrEmpty(attrValue))
                {
                    string[] noderole = attrValue.Split(mysplit);

                    foreach (string current in noderole)
                    {
                        if (current == rolename)
                        {
                            addItem = new ListItem();
                            addItem.Text = reader.GetAttribute("name");
                            addItem.Value = reader.GetAttribute("name");
                        }
                    }
                }
            }

        }
        bllMenu.Items.Add(addItem);

Jag får bara ut den sista av alla addItem i min lista.

Flyttar jag upp bllMenu.Items.Add(addItem); ett steg o har den näst sist år jag följande fel:
Objektreferensen har inte angetts till en instans av ett objekt.

Hur får jag ut samtliga addItem som skapas i while-satsen? SKa få ut tre, men enbart 1 kommer ut. :stud

254 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
119 ms — hämta statistik (db)
134 ms — hämta tråd, inlägg och bilagor (db)