2012-05-18 29 views
4

我有一個xml文件,並且想要將一個子元素添加到其中一個節點,不知道xpath爲什麼會拋出null異常。這當然是因爲我可能給錯誤的xpath值。 會是什麼XPath的添加元素在這裏:當使用xpath爲xml添加元素時,對象引用未設置爲對象的實例

的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

什麼是拋出「沒有設置對象實例的對象引用」錯誤?一個C#程序? – mzjn

+0

是的,問題解決了。當xpath無法找到路徑時,我總是得到這個異常! – Charu

回答

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

我不確定爲什麼你的xpath中有BH

此XPath查詢從您的樣品只選擇一個元素,我認爲這是你想要的:

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

對不起,我編輯了xpath,它只是KER,而不是BH – Charu

+0

我建議你使用xpath嗎? – MattH

+0

我必須給這些值@ VALUE ='LP6ACTIVATION'嗎?我的意思是隻有一個INPUT標籤,實際上我沒有這個值在當前的情況下。 – Charu

相關問題