Object reference not set to object instance when adding element using xpath for xml

I have an xml file and you want to add a child to one of the nodes, you don't know why xpath throws an exception. This, of course, is because I may be giving the wrong xpath value. What will be the xpath for adding an element here:

XPath I use:

//SESSIONANALYSER/KER/MODES/NI/STATEINFORMATION[@TYPE='PREPAID']/INIT/INPUT 

Here where I want to add a child:

 <KER> <MODES> <NI> <STATEINFORMATION TYPE="PREPAID"> <INIT INVALIDINPUTRESPONSE="-2"> <INPUT VALUE="LP6ACTIVATION"> **<I have to add a child element here>** 

in the following xml:

 <SESSIONANALYSER> <AP> <MODES> <NI> <STATEINFORMATION TYPE="PREPAID"> <INIT INVALIDINPUTRESPONSE="-2"> <INPUT VALUE="SLN7ACTIVATION"> <METHOD NAME="CHECKSUBSCRIBERBALANCE" PARAMETERS="SLN7" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SETPSOINUCIP" PARAMETERS="SLN7" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="SLN7DEACTIVATION"> <METHOD NAME="UNSETPSOINUCIP" PARAMETERS="SLN7" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="jk" PARAMETERS="k" POSSIBLEACTIONS1="k" MAINTAINSESSION="h" RESPONSE="l" NEXTLEVEL=";"></METHOD> <METHOD NAME="SENDMESSAGE" PARAMETERS="23" POSSIBLEACTIONS1="FALLOUTONSUCCESS" MAINTAINSESSION="yes" RESPONSE="format" NEXTLEVEL="msdfm"></METHOD> <METHOD NAME="payments" PARAMETERS="parametervalue" POSSIBLEACTIONS1="fg,f" MAINTAINSESSION="fdjfg89" RESPONSE="ndfgm" NEXTLEVEL="msdfm"></METHOD> <METHOD NAME="payments" PARAMETERS="l" POSSIBLEACTIONS1="l" MAINTAINSESSION="l" RESPONSE="l" NEXTLEVEL="l"></METHOD> <METHOD NAME="payments" PARAMETERS="l" POSSIBLEACTIONS1="l" MAINTAINSESSION="l" RESPONSE="l" NEXTLEVEL="l"></METHOD> <METHOD NAME="payments" PARAMETERS="k" POSSIBLEACTIONS1="k" MAINTAINSESSION="k" RESPONSE="k" NEXTLEVEL="k"></METHOD> <METHOD NAME="payments" PARAMETERS="L" POSSIBLEACTIONS1="L" MAINTAINSESSION="L" RESPONSE="L" NEXTLEVEL="L"></METHOD> <METHOD NAME="SENDMESSAGE" PARAMETERS="23" POSSIBLEACTIONS1="FALLOUTONSUCCESS" MAINTAINSESSION="yes" RESPONSE="format" NEXTLEVEL="msdfm"></METHOD> <METHOD NAME="payments" PARAMETERS="12" POSSIBLEACTIONS1="FALLOUTONSUCCESS" MAINTAINSESSION="yes" RESPONSE="format" NEXTLEVEL="msvm"></METHOD> <METHOD NAME="SENDMESSAGE" PARAMETERS="23" POSSIBLEACTIONS1="FALLOUTONSUCCESS" MAINTAINSESSION="yes" RESPONSE="0" NEXTLEVEL="3"></METHOD> <METHOD NAME="SENDMESSAGE" PARAMETERS="23" POSSIBLEACTIONS1="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="format" NEXTLEVEL="3"></METHOD> </INPUT> </INIT> <FAILUREREGION INVALIDINPUTRESPONSE="-2"> <INPUT VALUE="LOWBALANCE"> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="1" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="SETPSOFAILED"> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="2" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="UCIPDEBIT"> <METHOD NAME="UNSETPSOINMINSAT" PARAMETERS="SLN7" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_UNSETPSO_FALSE" MAINTAINSESSION="NO" RESPONSE="-6" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="3" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="UNSETPSO"> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="4" NEXTLEVEL="" /> </INPUT> </FAILUREREGION> </STATEINFORMATION> <STATEINFORMATION TYPE="POSTPAID"> <INIT INVALIDINPUTRESPONSE="-2"> <INPUT VALUE="SLN7DEACTIVATION"> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="5" NEXTLEVEL="" /> </INPUT> </INIT> </STATEINFORMATION> </NI> </MODES> </AP> <TN> <MODES> <NI> <STATEINFORMATION TYPE="PREPAID"> <INIT INVALIDINPUTRESPONSE="-2"> <INPUT VALUE="LPC16ACTIVATION"> <METHOD NAME="SETPSOINUCIP" PARAMETERS="LPC16" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LP26ACTIVATION"> <METHOD NAME="SETPSOINUCIP" PARAMETERS="LP26" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LP49ACTIVATION"> <METHOD NAME="SETPSOINUCIP" PARAMETERS="LP49" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LPT16ACTIVATION"> <METHOD NAME="SETPSOINUCIP" PARAMETERS="LPT16" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LP60ACTIVATION"> <METHOD NAME="SETPSOINUCIP" PARAMETERS="LP60" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LPC16DEACTIVATION"> <METHOD NAME="UNSETPSOINUCIP" PARAMETERS="LPC16" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LP26DEACTIVATION"> <METHOD NAME="UNSETPSOINUCIP" PARAMETERS="LP26" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <!--<METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" />--> </INPUT> <INPUT VALUE="LP49DEACTIVATION"> <METHOD NAME="UNSETPSOINUCIP" PARAMETERS="LP49" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LPT16DEACTIVATION"> <METHOD NAME="UNSETPSOINUCIP" PARAMETERS="LPT16" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LP60DEACTIVATION"> <METHOD NAME="UNSETPSOINUCIP" PARAMETERS="LP60" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> </INIT> <FAILUREREGION INVALIDINPUTRESPONSE="-2"> <INPUT VALUE="LOWBALANCE"> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="1" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="SETPSOFAILED"> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="2" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="UCIPDEBIT"> <METHOD NAME="UNSETPSOINMINSAT" PARAMETERS="SLN7" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_UNSETPSO_FALSE" MAINTAINSESSION="NO" RESPONSE="-6" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="3" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="UNSETPSO"> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="4" NEXTLEVEL="" /> </INPUT> </FAILUREREGION> </STATEINFORMATION> <STATEINFORMATION TYPE="POSTPAID"> <INIT INVALIDINPUTRESPONSE="-2"> <INPUT VALUE=""> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="5" NEXTLEVEL="" /> </INPUT> </INIT> </STATEINFORMATION> </NI> </MODES> </TN> <KER> <MODES> <NI> <STATEINFORMATION TYPE="PREPAID"> <INIT INVALIDINPUTRESPONSE="-2"> <INPUT VALUE="LP6ACTIVATION"> <METHOD NAME="SETPSOINUCIP" PARAMETERS="LP6" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LPSP15ACTIVATION"> <METHOD NAME="SETPSOINUCIP" PARAMETERS="LPSP15" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LP6DEACTIVATION"> <METHOD NAME="UNSETPSOINUCIP" PARAMETERS="LP6" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LPSP15DEACTIVATION"> <METHOD NAME="UNSETPSOINUCIP" PARAMETERS="LPSP15" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="LP6SUBSCRIPTION"> <METHOD NAME="CHECKSUBSCRIBERBALANCE" PARAMETERS="LP6" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_LOWBALANCE_INSUFFICIENTBALANCE" MAINTAINSESSION="NO" RESPONSE="-3" NEXTLEVEL="" /> <METHOD NAME="SETPSOINUCIP" PARAMETERS="LP6" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="FIREUCIPDEBIT" PARAMETERS="LP6" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_CHARGINGFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="0" NEXTLEVEL="" /> </INPUT> </INIT> <FAILUREREGION INVALIDINPUTRESPONSE="-2"> <INPUT VALUE="LOWBALANCE"> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="1" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="CHARGINGFAILED"> <METHOD NAME="UNSETPSOINUCIP" PARAMETERS="LP6" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_SETPSOFAILED_FALSE" MAINTAINSESSION="NO" RESPONSE="-4" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="6" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="SETPSOFAILED"> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="2" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="UCIPDEBIT"> <METHOD NAME="UNSETPSOINMINSAT" PARAMETERS="SLN7" POSSIBLEACTIONS="FALLOUTON_FAILUREREGION_UNSETPSO_FALSE" MAINTAINSESSION="NO" RESPONSE="-6" NEXTLEVEL="" /> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="3" NEXTLEVEL="" /> </INPUT> <INPUT VALUE="UNSETPSO"> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="4" NEXTLEVEL="" /> </INPUT> </FAILUREREGION> </STATEINFORMATION> <STATEINFORMATION TYPE="POSTPAID"> <INIT INVALIDINPUTRESPONSE="-2"> <INPUT VALUE=""> <METHOD NAME="SENDMESSAGE" PARAMETERS="" POSSIBLEACTIONS="FALLOUTONSUCCESS" MAINTAINSESSION="NO" RESPONSE="5" NEXTLEVEL="" /> </INPUT> </INIT> </STATEINFORMATION> </NI> </MODES> </KER> </SESSIONANALYSER> 
+4
source share
2 answers

XPath expression that you evaluate :

 //SESSIONANALYSER/KER/MODES/NI/STATEINFORMATION[@TYPE='PREPAID']/INIT/INPUT 

selects not one, but six INPUT elements .

You indicated that you want to add a new item after the first of them.

Therefore, use this XPath expression that selects exactly one (desired) INPUT element :

 (//SESSIONANALYSER/KER/MODES/NI/STATEINFORMATION[@TYPE='PREPAID']/INIT/INPUT)[1] 

Most XPath engines provide a SelectNodes() method that returns the selected nodes to a NodeList , and the programmer needs to NodeList over this collection - even if only one node is selected - keep this in mind.

+2
source

I am not sure why you have BH in your xpath.

This xpath request selects only one element from your sample, and I think this is the one you want:

 /SESSIONANALYSER/KER/MODES/NI/STATEINFORMATION[@TYPE='PREPAID'] /INIT[@INVALIDINPUTRESPONSE='-2'] /INPUT[@VALUE='LP6ACTIVATION'] 
+1
source

Source: https://habr.com/ru/post/1413116/


All Articles