XML中查找IP数值并进行替换[已解决]
本帖最后由 allen 于 2011-11-3 09:46 编辑<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<category tag="0">
<add key="a" value="1.1.1.1" />
<add key="ap" value="10" />
<add key="b" value="2.2.2.2" />
<add key="bp" value="20" />
</category>
</appSettings>
</configuration>
代码如上
我现在想修改a,b的ip,修改后a的IP为3.3.3.3,b的ip修改后为4.4.4.4
俺的尝试:
1.想利用查找函数找到这个IP,然后进行替换
2.在坛子里搜到一个逐行读取查找的脚本,可我运行后这个XML文件出现乱码,原因为编码方式,但我不知道怎么样转为UTF-8格式,且那个脚本没有用fileopen,脚本如下:
#AutoIt3Wrapper_Run_Debug_Mode=y
#include <file.au3>
$countline=_FileCountLines(@ScriptDir & '\aa.xml')
$contentline=FileReadLine(@ScriptDir & '\aa.xml')
For $i=1 To $countline Step 1
$content=FileReadLine(@ScriptDir & '\aa.xml',$i)
If @error Then Exit
If StringRegExp($content,'\<WriteSpeed\>0\</WriteSpeed\>',0)=0 Then ContinueLoop;;;;如果该行不匹配 <WriteSpeed>0</WriteSpeed> 就继续读取、检查下一行
_FileWriteToLine(@ScriptDir & '\aa.xml',$i,'<WriteSpeed>xyz</WriteSpeed>',1);;;用新行覆盖旧行
Next
现在请各位高手帮分析下:
尝试1是否可以实现
尝试2怎么让它替换后不是乱码
PS:我觉的1应该比较好实现,不过因为是菜鸟,所以请教各位,谢谢。 搜索“XML”得到很多答案的说。。。。。。。。 stringregexpreplace($str,"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","替换") 回复 3# drunk
这个替换的话,就把a和b都一起替换了 回复 4# xms77
行替换是可以的 楼主我提供一个自用的小工具代码给你看看是否适用。
功能:
自动修改Servers.txt中变更的ip地址
使用方式:
必须配合Servers.txt和ipupdate.txt使用,和Servers.txt、ipupdate.txt放在同一目录下运行。
ipupdate.txt文件格式旧ip在前,新ip在后,使用","分割。运行后同目录下会生成Serversnew.txt
和ipupdate.log文件,可以查看log看是否修改成功。
#Include <File.au3>
Local $currentline1
Local $string1
Local $string2
Local $filename1 = @ScriptDir&"\ipupdate.txt"
Local $filename2 = @ScriptDir&"\Servers.txt"
Local $linecount1
Local $i
$linecount1 = _FileCountLines($filename1)
Local $chars = FileRead($filename2)
For $i=1 to $linecount1 Step +1
$currentline1 = FileReadLine($filename1,$i)
Local $array = StringSplit($currentline1, ",",1)
$string1 = $array
$string2 = $array
FileOpen(@ScriptDir&"\serversnew.txt",10)
Local $charsreplaced = StringReplace ($chars, $string1, $string2)
Local $numreplacements = @extended
FileOpen(@ScriptDir&"\ipupdate.log",9)
FileWriteLine(@ScriptDir&"\ipupdate.log",$string1&"修改完成,共修改"&$numreplacements&"处。")
FileClose(@ScriptDir&"\ipupdate.log")
FileWrite(@ScriptDir&"\Serversnew.txt",$charsreplaced)
FileClose(@ScriptDir&"\Serversnew.txt")
Local $chars = FileRead(@ScriptDir&"\Serversnew.txt")
Next
Exit
你把你要修改的文件改名为servers.txt,要修改的ip按格式放到ipupdate.txt中,旧ip在前,新ip在后,使用","分割。如果有多个需要修改的ip,请分多行写入。 回复 5# xms77
'(a[^=]+)="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"',''$1=192.168.1.1" 回复 8# drunk
谢谢,学习了! 学习一下XML的操作 我正则的知识很菜鸟的说,{:face (319):},这两天断网没验证。稍后验证下。 回复 8# drunk
可否给出完整代码? 多多向各位学习 怎么老是提示金钱不足,扣了我的钱,不给下东西 回复 12# allen
$file = FileRead("test.xml")
MsgBox(0,0,StringRegExpReplace($file,'("a"[^=]+)="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"','$1="192.168.1.1"'))
MsgBox(0,0,StringRegExpReplace($file,'("b"[^=]+)="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"','$1="255.255.255.255"'))
页:
[1]
2