我有一个xml文件,想要将一个子元素添加到其中一个节点,不知道为什么xpath会抛出null异常。这肯定是因为我可能给出了错误的xpath值。 在这里添加元素的xpath是什么:
XPath我正在使用:
//SESSIONANALYSER/KER/MODES/NI/STATEINFORMATION[@TYPE='PREPAID']/INIT/INPUT
这是我想要添加子元素的地方:
<KER>
<MODES>
<NI>
<STATEINFORMATION TYPE="PREPAID">
<INIT INVALIDINPUTRESPONSE="-2">
<INPUT VALUE="LP6ACTIVATION">
**<I have to add a child element here>**
在以下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>
答案 0 :(得分:2)
您正在评估的XPath表达式:
//SESSIONANALYSER/KER/MODES/NI/STATEINFORMATION[@TYPE='PREPAID']/INIT/INPUT
不仅选择一个而是选择六个INPUT
元素。
您指定要在第一个之后添加新元素。
因此,请使用此XPath表达式,它只选择一个(所需的)INPUT
元素:
(//SESSIONANALYSER/KER/MODES/NI/STATEINFORMATION[@TYPE='PREPAID']/INIT/INPUT)[1]
大多数XPath引擎提供SelectNodes()
方法,返回NodeList
中的选定节点,程序员需要遍历此集合 - 即使只选择了一个节点 - 请加上心。
答案 1 :(得分:1)
我不确定为什么你的xpath中有BH
。
此xpath查询只从您的示例中选择一个元素,我认为它是您想要的那个:
/SESSIONANALYSER/KER/MODES/NI/STATEINFORMATION[@TYPE='PREPAID']
/INIT[@INVALIDINPUTRESPONSE='-2']
/INPUT[@VALUE='LP6ACTIVATION']