allen 发表于 2011-9-22 12:37:58

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应该比较好实现,不过因为是菜鸟,所以请教各位,谢谢。

huangke 发表于 2011-9-23 01:20:27

搜索“XML”得到很多答案的说。。。。。。。。

drunk 发表于 2011-9-23 10:24:30

stringregexpreplace($str,"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","替换")

xms77 发表于 2011-9-23 13:27:12

回复 3# drunk
这个替换的话,就把a和b都一起替换了

xms77 发表于 2011-9-23 13:28:15

回复 4# xms77
行替换是可以的

hasuterran 发表于 2011-9-23 16:18:31

楼主我提供一个自用的小工具代码给你看看是否适用。
功能:

自动修改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

hasuterran 发表于 2011-9-23 16:24:07

你把你要修改的文件改名为servers.txt,要修改的ip按格式放到ipupdate.txt中,旧ip在前,新ip在后,使用","分割。如果有多个需要修改的ip,请分多行写入。

drunk 发表于 2011-9-26 08:25:55

回复 5# xms77


    '(a[^=]+)="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"',''$1=192.168.1.1"

xms77 发表于 2011-9-26 08:50:19

回复 8# drunk
谢谢,学习了!

sxpms 发表于 2011-9-26 12:59:53

学习一下XML的操作

allen 发表于 2011-9-26 13:12:58

我正则的知识很菜鸟的说,{:face (319):},这两天断网没验证。稍后验证下。

allen 发表于 2011-9-26 13:25:04

回复 8# drunk


    可否给出完整代码?

lilufb 发表于 2011-9-26 15:26:58

多多向各位学习

lilufb 发表于 2011-9-26 15:28:06

怎么老是提示金钱不足,扣了我的钱,不给下东西

drunk 发表于 2011-9-26 16:03:19

回复 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
查看完整版本: XML中查找IP数值并进行替换[已解决]