2012-08-13 86 views
0

我的NSIS安裝程序正試圖向現有XML文件添加一些XML。將大型XML元素添加到XML文件始終失敗

我的問題:它無法將節點/元素添加到文件,因爲我認爲node/element中有太多的子元素。

如何將此XML元素添加到現有的XML文件?

注意如果我將字符串OVERRIDES_TEXT的長度減半,那麼代碼會正確地將節點添加到XML文件中。任何更長的時間,並失敗。是否有可能在2 go中寫入元素/節點的內容(不是文本而是子元素)?

${xml::LoadFile} "${xmlFileName}" $R0 
${xml::GotoPath} "${elementPath}" $R0 
${xml::CreateNode} '<Overrides>${OVERRIDES_TEXT}</Overrides>' $R0 
${xml::InsertAfterNode} $R0 $R1 # always fails here $R1 = -1 

# below is the string that causes the error 
!define OVERRIDES_TEXT "<Override>\ 
       <Key>EXDS_CUSTOMISATION_REVISION</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>CUSTOMER_USER_4D</Key>\ 
       <Value>C:\12d\10.00\Customers\EXDS_Customisation\EXDS_User</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>CUSTOMER_LIB_4D</Key>\ 
       <Value>C:\12d\10.00\Customers\EXDS_Customisation\EXDS_User_Lib</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>USER_4D</Key>\ 
       <Value>C:\12d\10.00\User</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>USER_LIB_4D</Key>\ 
       <Value>C:\12d\10.00\User_Lib</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>EXDS_USER_LIB</Key>\ 
       <Value></Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>EXDS_USER</Key>\ 
       <Value></Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>VERSION_12D_MODEL</Key>\ 
       <Value>10.0</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>CPATH</Key>\ 
       <Value>$$CUSTOMER_LIB_4D:$$CUSTOMER_USER_4D:$$USER_LIB_4D:$$USER_4D:$$LIB_4D:$$SET_UPS_4D</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>AUTHORIZATION_4D</Key>\ 
       <Value>C:\12d\10.00\nodes.4d</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>USE_NAMES_COMMENT_4D</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>FILE_READ_ADD_TO_VIEW_4D</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>GENIO_WILDCARD_4D</Key>\ 
       <Value>*.inp</Value>\ 
       <State>1</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>RUN_MACROS_FILE_4D</Key>\ 
       <Value>$$USER\macros.4d</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>PROJECT_DETAILS_4D</Key>\ 
       <Value>$$USER\project_details.dtl</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>REPORT_HEADER_4D</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>AUTO_TIN_SYNC_4D</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>AUTO_MODEL_SYNC_4D</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>SHARE_CHECK_INTERVAL_4D</Key>\ 
       <Value>300</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>SHARED_ELEMENT_COLOUR_4D</Key>\ 
       <Value>blue</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>SHARING_ELEMENT_COLOUR_4D</Key>\ 
       <Value>red</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>DEFAULT_PLAN_PLOT_SCALE_4D</Key>\ 
       <Value>500</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>DWG_PLOT_SEED_FILE_4D</Key>\ 
       <Value>$$USER\EXDS_Acad_Plot_Template.dwt</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>DEFAULT_RASTER_DPI_4D</Key>\ 
       <Value>600</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>OPENGL_VIEW_BACKING_STORE_4D</Key>\ 
       <Value>2</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>MULTI_LINE_TEXT_4D</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>NEW_MTF_EDITOR_AUTOPAN_DEFAULT_4D</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>WINDOWS_VEHICLE_PATH_4D</Key>\ 
       <Value>C:\Apps\VPath</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>chainage_equality_4d</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>XML_4D</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>\ 
      <Override>\ 
       <Key>USE_V10_BOXING_CALCS_4D</Key>\ 
       <Value>1</Value>\ 
       <State>0</State>\ 
      </Override>" 
+1

請問如果你讓XML更短,而不是多工作? – 2012-08-13 03:10:14

+0

@PetrAbdulin是的,如果我縮短XML,我會嘗試多行。 – 2012-08-13 04:16:33

+0

我試圖讓字符串一行 - 不是多行 - 發生同樣的錯誤。 – 2012-08-13 04:24:41

回答

0

我不知道這是否語法正確:

${xml::InsertAfterNode} $R0 $R1 

souldn't它是

${xml::InsertAfterNode} "$R0" $R1 

+0

thansk的意見。我嘗試了你所說的(以字符串形式傳遞),但仍然失敗。任何想法什麼是錯的 – 2012-08-13 04:15:59

0

你可能會擊中NSIS字符串長度的限制,試着在與XML插件時添加一個<Override>節點...