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