Odkaz na objekt není nastaven na instanci objektu Chyba při mazání z XML   zodpovězená otázka

VB.NET, XML

Zdravím.

Při mazání uzlu v XML.xml podle id.attributu mi skočí chyba:

Odkaz na objekt není nastaven na instanci objektu.

Chybová hláška:

V aplikaci /VS došlo k chybě serveru.

Odkaz na objekt není nastaven na instanci objektu.

Popis: Při provádění aktuálního webového požadavku došlo k neošetřené výjimce. Další informace o chybě a o jejím původu v kódu naleznete v trasování zásobníku. 

Podrobnosti o výjimce: System.NullReferenceException: Odkaz na objekt není nastaven na instanci objektu.

Zdrojová chyba: 


Řádek 31:         Dim root As XmlNode = XML.DocumentElement
Řádek 32:         Dim smazat As XmlElement = root.SelectSingleNode("/zakaznici/zakaznik[@id='" & zakazniciIDDrop.SelectedValue & "']")
Řádek 33:         root.RemoveChild(smazat)
Řádek 34:         XML.Save(MapPath("") + "/zakaznici/" + "zakaznici.xml")
Řádek 35:         Label1.Text = "Hotovo"

Zdrojový soubor: D:\Web\VS\mazani.aspx.vb    Řádek: 33 

Trasování zásobníku: 


[NullReferenceException: Odkaz na objekt není nastaven na instanci objektu.]
   System.Xml.XmlNode.RemoveChild(XmlNode oldChild) +33
   mazani.del_zakaznik_Click(Object sender, EventArgs e) in D:\Web\VS\mazani.aspx.vb:33
   System.EventHandler.Invoke(Object sender, EventArgs e) +0
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9633194
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724

Informace o verzi: Microsoft .NET Framework verze:4.0.30319; verze ASP.NET:4.0.30319.34237

Soubor .aspx.vb

Imports Microsoft.VisualBasic.FileIO.FileSystem
Imports System.Xml.XPath
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Collections
Imports System.Data
Partial Class mazani
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim obsah_xml As New XmlDocument
            obsah_xml.Load(MapPath("") + "/zakaznici/" + "zakaznici.xml")
            Dim root As XmlNode = obsah_xml.DocumentElement
            Dim novy_zaznam As XmlElement = obsah_xml.CreateElement("zakaznik")
            Dim idp As String = root.LastChild.Attributes(0).Value
            Dim id As String = root.FirstChild.Attributes(0).Value
            For zakaznik As Integer = id To idp
                zakazniciIDDrop.Items.Add(zakaznik)
            Next
        End If
    End Sub

    Protected Sub del_zakaznik_Click(sender As Object, e As EventArgs) Handles del_zakaznik.Click
        Dim XML As New XmlDocument
        XML.Load(MapPath("") + "/zakaznici/" + "zakaznici.xml")
        Dim root As XmlNode = XML.DocumentElement
        Dim smazat As XmlElement = root.SelectSingleNode("/zakaznici/zakaznik[@id='" & zakazniciIDDrop.SelectedValue & "']")
        root.RemoveChild(smazat)
        XML.Save(MapPath("") + "/zakaznici/" + "zakaznici.xml")
        Label1.Text = "Hotovo"
        Label1.Visible = True

    End Sub
End Class

Soubor .aspx

<%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="mazani.aspx.vb" Inherits="mazani" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <h2>
    Mazání zákazníka
    </h2><br />
    <p>
    Smaž zákazníka s ID:<asp:DropDownList ID="zakazniciIDDrop" runat="server"></asp:DropDownList></p>
    <p>
    <asp:Button ID="del_zakaznik" runat="server" Text="Smaž zákazníka" CssClass="button" OnClick="del_zakaznik_Click"/></p>
    <asp:Label ID="Label1" runat="server" Visible="false"></asp:Label>
</asp:Content>

Doufám že tady nespamuju, ale našel jsem téma se stejnou chybou jen o SQL a to mi moc neporadilo.

Uzel v XML se smaže, ale stránka hodí tuto chybu.

Předem díky za rady.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

ještě jsem zapoměl zdroj xml

<?xml version="1.0" encoding="utf-8"?>
<zakaznici>
  <zakaznik id="1">
    <titul></titul>
    <jmeno></jmeno>
    <prijmeni></prijmeni>
    <adresa></adresa>
    <mesto></mesto>
    <birthday></birthday>
    <statut></statut>
    <childs></childs>
    <earn></earn>
    <mail></mail>
    <tel></tel>
    <foto></foto>
  </zakaznik>
</zakaznici>
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Moc se v tom nevyznám, ale zkuste si to odkrokovat tam kde vám to hází chybu. Zřejmě máte v proměnné smazat null, tak se podívejte, jakým přesně to ve výsledku hledá XPathem a tak podobně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chybu to hází na řádku 33

root.removechild(smazat)

Když jsem

Řádek 33:         root.RemoveChild(smazat)
Řádek 34:         XML.Save(MapPath("") + "/zakaznici/" + "zakaznici.xml")
Řádek 35:         Label1.Text = "Hotovo"

nacpal do cyklu For Each tak to přestalo házet chybu, ale zase to pro změnu maže první dva elementy místo toho co vyberu v droplistu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Whoops? Na čem jste ten foreach pouštěl? Místo SelectSingleNode jste použil SelectNodes? Jestli je to tak, tak máte v proměnné smazat null, protože vám XPath našel víc výsledků než jeden. Podívejte se jaký přesně XPath na ten XML pouštíte a pak se podívejte co vám ten XPath všechno vrací. Dejte si tam někam breakpoint a podívejte se, co máte v proměnných.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

díky moc za rady nakonec jsem to vyřešil tak, že jsem ten remove

obalil

If Not smazat is nothing

a jede to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback