0
我想比較兩個文件:一個是xml文件,另一個是文本文件。如果有一個字符串出現在xml文件中,但沒有出現在文本文件中,它將從xml文件中刪除。使用NSIS刪除XML文件中的多個節點
我試過使用xml.nsh並且還使用FileSearch來比較它們。刪除一個節點後,循環總是停止,因爲它找不到下一個節點。任何想法如何繼續循環?
${xml::LoadFile} "$TEMP\$IISXMLFile" $0
${xml::GotoPath} "/unattend/servicing/package" $0
${xml::FirstChild} "assemblyIdentity" $1 $0
${xml::NextSibling} "selection" $7 $0
${While} $0 == 0
${xml::GetAttribute} "name" $3 $4
Push $TEMP\featurelist.txt
Push $3
Call FileSearch
Pop $0 #Number of times found throughout
Pop $1 #Number of lines found on
${IF} $0 == 0
${xml::RemoveNode} $7
${ENDIF}
${xml::NextSibling} "selection" $7 $0
${EndWhile}
${xml::SaveFile} "$TEMP\$IISXMLFile" $0
${xml::NodeHandle} $0
${xml::Unload}
我解決它使用此代碼:
${xml::LoadFile} "$TEMP\$IISXMLFile" $0
loopXML:
${xml::GotoPath} "/unattend/servicing/package" $0
${xml::FirstChild} "assemblyIdentity" $1 $0
${xml::NextSibling} "selection" $7 $0
${While} $0 == 0
${xml::GetAttribute} "name" $3 $4
Push $TEMP\featurelist.txt
Push $3
Call FileSearch
Pop $0 #Number of times found throughout
Pop $1 #Number of lines found on
${IF} $0 == 0
${xml::RemoveNode} $7
${xml::NodeHandle} $0
goto loopXML
${ENDIF}
${xml::NextSibling} "selection" $7 $0
${EndWhile}
${xml::SaveFile} "$TEMP\$IISXMLFile" $0
${xml::NodeHandle} $0
${xml::Unload}
我也想重新開始循環從一開始就。你能看看我的解決方案嗎?有比我更簡單的解決方案嗎? – currarpickt 2015-02-13 07:14:10
@currarpickt你可能不需要LoadFile,SaveFile和Unload在循環中,否則它看起來不錯... – Anders 2015-02-14 00:57:53