huaisha1224 发表于 2011-8-15 14:24:47

求助-如何对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>往高手指点一二

lpxx 发表于 2011-8-15 19:33:06

查找的话,可以用_XMLGetValue
参考:
#include <_XMLDomWrapper.au3>
$TEMP = "1.xml"
_XMLFileOpen($TEMP)
$t0 = _XMLGetValue("/ClientConfig/WriteSpeed")
$t1 = _XMLGetValue("/ClientConfig/Resolution")
MsgBox(0,$t0,$t1)

飘云 发表于 2011-8-15 19:42:14

用正则最方便,麻烦的方案可以先用StringInStr获取<WriteSpeed>的位置,然后获取前一位置之后的</WriteSpeed>的位置,用StringMid取中间位置的值,然后接着取下一个<WriteSpeed>的位置,循环下去

ghl781258 发表于 2011-8-16 20:19:39


#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

huaisha1224 发表于 2011-8-25 17:29:17

回复 4# ghl781258


    非常感谢
页: [1]
查看完整版本: 求助-如何对xml进行查找替换操作[已解决]