NullPointerException bei leerem Element

Status
Nicht offen für weitere Antworten.
Moin!

Ich bin absoluter Anfänger in Sachen XML. Ich möchte eine XML Datei auslesen, was auch klappt. Aber wenn ein Element keinen Inhalt hat, klappts nicht. Dann gibts immer ne NullPointerException. Is ja auch logisch.

Es gibt in meiner XML nämlich ein Element "Statements", dass nicht zwangsläufig einen Inhalt hat.

Aber wie stelle ich das denn fest, damit ich entsprechend darauf reagieren kann? Hoffe ihr rafft, was ich meine ???:L

Hier ein Auszug aus meinem Prog:

Code:
public void auswertung()

{

int a, anz_untertags,b;

NodeList tagliste=document.getElementsByTagName 

("Player");

NodeList ChildTags;

int anz=tagliste.getLength();

Node das_tag;

String inhalt="";

short TagTyp;

for (a=0; a<anz; a++)

{

ChildTags=tagliste.item(a).getChildNodes();

anz_untertags=ChildTags.getLength();

for (b=0; b<anz_untertags; b++)

{ 

das_tag=ChildTags.item(b);

TagTyp=das_tag.getNodeType();

if (TagTyp==Node.ELEMENT_NODE)

{

inhalt=inhalt + das_tag.getFirstChild

().getNodeValue() + "\t\t";

}

}

fenster.ausgabe(inhalt);

inhalt="\n";

}

}

Die XML-Datei sieht wie folgt aus:

Code:
<Player Index="0">
				<PlayerID>1234567</PlayerID>
				<PlayerName>Max Mustermann</PlayerName>
				<PlayerNumber>100</PlayerNumber>
				<Age>29</Age>
				<MarketValue>2990000</MarketValue>
				<TSI>2990</TSI>
				<PlayerForm>7</PlayerForm>
				<Statement></Statement>
				<Experience>4</Experience>
				<Leadership>3</Leadership>
				
				<Salary>11040</Salary>
				<IsAbroad>1</IsAbroad>
				
				<Agreeability>3</Agreeability>
				<Aggressiveness>3</Aggressiveness>
				<Honesty>3</Honesty>
				
					<LeagueGoals>2</LeagueGoals>
					<CupGoals>4</CupGoals>
					<FriendliesGoals>0</FriendliesGoals>
					<CareerGoals>41</CareerGoals>
					<CareerHattricks>4</CareerHattricks>
				
				<Specialty>0</Specialty>
				<TransferListed>0</TransferListed>
				<NationalTeamID>0</NationalTeamID>
				<CountryID>40</CountryID>
				<Caps>0</Caps>
				<CapsU20>0</CapsU20>
				
					<Cards>0</Cards>
					<InjuryLevel>-1</InjuryLevel>
				
					<StaminaSkill>8</StaminaSkill>
					<KeeperSkill>2</KeeperSkill>
					<PlaymakerSkill>5</PlaymakerSkill>
					<ScorerSkill>7</ScorerSkill>
					<PassingSkill>7</PassingSkill>
					<WingerSkill>4</WingerSkill>
					<DefenderSkill>3</DefenderSkill>
					<SetPiecesSkill>4</SetPiecesSkill>
				
				
			</Player>

Danke schon ma vorab! :applaus:
 
lern mal deinen code zu formatieren das kann ja kein mensch lesen
überprüfe halt vorher ob getNodeValue() null oder "" zurückleifert.
 
Sorry, die Formatierung isn bisschen durcheinander geraten. Is sonst auch nich meine Art.
Und das mit dem getNodeValue() auf null überprüfen hatte ich ja auch schon gemacht, aber ich muss da wohl was falsch machen. Hab mir vorerst ma mit ner try catch Klausel geholfen. Das kann aber ja nich Sinn der Sache sein. Wenigstens kann ich aber erstma weitermachen. Hier der Part den ich ergänzt hab:

Code:
try {

    if (das_tag.getFirstChild().getNodeValue() == null) {         // Hier muss was falsch sein!
	
        inhalt += "---\t\t";
    }

    else {

        inhalt=inhalt + das_tag.getFirstChild().getNodeValue() + "\t\t";

    }

}

catch (NullPointerException e) {
	
    //inhalt += "---\t\t";         Wenn ich diese Zeile wieder freigebe, dann läufts so wie ich will.
}
 
das_tag.getFirstChild().getNodeValue()

mach halt erst getfirstChild, prüfe das auf null und rufe danach erst die Methode getNodeValue auf?

Code:
Node child=null;
if(null!=(child=das_tag.getFirstChild())){
    // machwas
}
 
Danke! So wollt ichs haben 😀
Hatte gedacht, dass ich erst mit getNodeValue() auf null prüfen kann. Naja, bin halt noch neu auf dem Gebiet.
:applaus:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben