Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# Der Objektverweis wurde nicht auf eine Objektinstanz festgel (https://www.delphipraxis.net/114741-der-objektverweis-wurde-nicht-auf-eine-objektinstanz-festgel.html)

Luckie 30. Mai 2008 13:45


Der Objektverweis wurde nicht auf eine Objektinstanz festgel
 
Ich habe ein ganz mysteriöses Problem:

Folgende Klasse:
Code:
// WebsiteItem
    public class WebsiteItem
    {
        private XPathDocument _pathDoc;
        private Boolean _isPrimary;
        private string _url;

        #region Getter/Setter

        public Boolean IsPrimary
        {
            get { return _isPrimary; }
            set { _isPrimary = value; }
        }

        public string URL
        {
            get { return _url; }
            set { _url = value; }
        }

        #endregion

        public WebsiteItem(XPathDocument PathDoc)
        {
            _pathDoc = PathDoc;
        }

        public void GetDetails()
        {
            XPathNavigator nav = _pathDoc.CreateNavigator();
            XPathNodeIterator nodeIter = nav.Select("businessRelationship/businessSupplier/company/websiteList/*");          
            if (nodeIter != null)
            {
                while (nodeIter.MoveNext())
                {
                    if (nodeIter.Current.HasAttributes)
                    {
                        _isPrimary = Convert.ToBoolean(nodeIter.Current.GetAttribute("primary", ""));
                    }
                    //Debug.WriteLine("==> " + nodeIter.Current.SelectSingleNode("website").Value);
                    _url = nodeIter.Current.SelectSingleNode("website").Value;
                }
            }
        }
    }
Und der Aufruf:
Code:
_wi = new WebsiteItem(_pathDoc);
                    _wi.GetDetails();
                    _websiteList.Add(_wi);
So, kommentiere ich die zeile _url = ... aus geht alles wunderbar. Lasse ich sie drinne kommt die fehlermeldung wie im Titel: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt". Kann mir das mal bitte jemand erklären?

Ich habe eine Klasse public class AddressItem die identisch ist mit der obigen nur eben andere XMl-Pfade. Dort habe ich das Problem nicht. Ich kann keinen Unterschied festestellen weder in der Implementierung noch beim Aufruf.

Phoenix 30. Mai 2008 13:52

Re: Der Objektverweis wurde nicht auf eine Objektinstanz fes
 
Hau da doch mal nen Breakpoint rein (genau auf der Zeile) und guck Dir mal an, welches der Elemente denn offensichtlich null ist.

Im Prinzip kommen ja nur nodeIter, sein Current und der SelectedNode in Frage.
Ich tippe am ehesten auf den Node. Gibts diesen "website" Knoten im Xml überhaupt?

Luckie 30. Mai 2008 13:59

Re: Der Objektverweis wurde nicht auf eine Objektinstanz fes
 
Das habe ich schon probiert. In den Hintfenster beim Debuggen kann ich sogar den Wert sehen, er wird also richtig ausgelesen.

Phoenix 30. Mai 2008 14:01

Re: Der Objektverweis wurde nicht auf eine Objektinstanz fes
 
Bei wirklich jedem Schleifendurchlauf?

Luckie 30. Mai 2008 14:06

Re: Der Objektverweis wurde nicht auf eine Objektinstanz fes
 
Gleich beim ersten.

Es sieht jetzt so aus:
Code:
public void GetDetails()
        {
            XPathNavigator nav = _pathDoc.CreateNavigator();
            XPathNodeIterator nodeIter = nav.Select("businessRelationship/businessSupplier/company/websiteList/*");          
            if (nodeIter != null)
            {
                while (nodeIter.MoveNext())
                {
                    if (nodeIter.Current.HasAttributes)
                    {
                        _isPrimary = Convert.ToBoolean(nodeIter.Current.GetAttribute("primary", ""));
                    }                   
                    if (nodeIter.Current.SelectSingleNode("website") != null)
                    {
                        _url = nodeIter.Current.Value;
                    }
                }
            }
        }
Ach so, was ich vergass zu erwähnen, die eingebaute Abfrage ist immer null. Ist wahrscheinlich ein gaaaaanz dooooofer Fehler.

Und die XML:
XML-Code:
<businessRelationship id="1">
    <businessSupplier id="1">
        <company>
            <companyName>DATAWERK</companyName>
            <websiteList>
                <website primary="true">www.datawerk.de</website>
                <website>www.datawerk.com</website>
            </websiteList>
            <addressList>
                <address primary="true" id="1">
                    <street>Friedrich-Ebert-Straße</street>
                    <number>4</number>
                    <city>Kassel</city>
                    <zipCode>34117</zipCode>
                    <state>Testbundesland</state>
                    <country>Testland</country>
                </address>
            </addressList>
            <landlineNumberList>
                <landlineNumber primary="true" id="1">
                    <countryCode>+49</countryCode>
                    <areaCode>561</areaCode>
                    <localNumber>7016470</localNumber>
                </landlineNumber>
            </landlineNumberList>
        </company>
    </businessSupplier>
</businessRelationship>
Wie gesagt, der gleiche Code funktioniert bei der addressList6e.

Khabarakh 30. Mai 2008 14:17

Re: Der Objektverweis wurde nicht auf eine Objektinstanz fes
 
Was willst du mit dem zweiten XPath bezwecken :gruebel: ? Vom ersten bekommst du ja schon alle website-Elemente und in diesen willst du nun nochmal nach einem website-Kind suchen? Ich würde schätzen: Lass das if einfach weg. Innerhalb der Schleife ist Current ja auf jeden Fall gültig.

Luckie 30. Mai 2008 14:30

Re: Der Objektverweis wurde nicht auf eine Objektinstanz fes
 
@ Khabarakh: :wall:
Ok, Jungs. Können wir das auf die Hitze schieben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz