求助-如何对xml进行查找替换操作[已解决]
本帖最后由 huaisha1224 于 2011-8-25 17:30 编辑需要将如下的xml中的<WriteSpeed>0</WriteSpeed>里面的0这个值进行修改
我的思路是
1、先读取出这个值、然后在修改这个值并保存
我用FileOpen 一直搞不定这个问题
xml的内容如下:这个仅仅是一项里面的内容 xml文件中可能存在上百条这样的内容 都需要同时修改<ClientConfig>
<Name>001</Name>
<Mac>000000000000</Mac>
<IP>16777217</IP>
<Mask>4294967040</Mask>
<Gateway>3232238078</Gateway>
<DNS1>3232260963</DNS1>
<DNS2>3378883619</DNS2>
<DiskID>301</DiskID>
<DiskID2>0</DiskID2>
<DiskID3>0</DiskID3>
<DiskID4>0</DiskID4>
<GroupID>0</GroupID>
<WriteMem>0</WriteMem>
<WriteSpeed>0</WriteSpeed>
<Resolution>67109632</Resolution>
<RateColor>0</RateColor>
<ServerID>0</ServerID>
<MoreWrite>0</MoreWrite>
<ClientState>0</ClientState>
</ClientConfig>往高手指点一二 查找的话,可以用_XMLGetValue
参考:
#include <_XMLDomWrapper.au3>
$TEMP = "1.xml"
_XMLFileOpen($TEMP)
$t0 = _XMLGetValue("/ClientConfig/WriteSpeed")
$t1 = _XMLGetValue("/ClientConfig/Resolution")
MsgBox(0,$t0,$t1) 用正则最方便,麻烦的方案可以先用StringInStr获取<WriteSpeed>的位置,然后获取前一位置之后的</WriteSpeed>的位置,用StringMid取中间位置的值,然后接着取下一个<WriteSpeed>的位置,循环下去
#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
回复 4# ghl781258
非常感谢
页:
[1]