h111666b 发表于 2020-12-3 13:42:52

读取.xml文本指定行数指定数值并删除,求助

<?xml version="1.0" encoding="UTF-8"?>
<!-- Produced by Beyond Compare 4 from Scooter Software -->
<BCState Version="1" MinVersion="1">
        <TBcState>
                <FirstStartup Value="False"/>
                <FormPositions>
                        <TCheckForUpdatesDialog Value="485;227;880;511"/>
                        <TDirLoadErrorDialog Value="488;321;878;417"/>
                        <TProfileBrowseDialog Value="383;77;982;660"/>
                        <TViewFrame Value="0;0;1366;738"/>
                </FormPositions>
        </TBcState>
        <TCheckForUpdatesState>
                <Build Value="25118"/>
                <CheckID Value="256591142818099"/>
                <LastChecked Value="2020-10-30 10:40:18"/>
        </TCheckForUpdatesState>

求助,读取第15行并删除第15行的 "256591142818099"/> 字符

afan 发表于 2020-12-3 14:02:49

Local $sSource = _
                @CRLF & _
                '<?xml version="1.0" encoding="UTF-8"?>' & @CRLF & _
                '<!-- Produced by Beyond Compare 4 from Scooter Software -->' & @CRLF & _
                '<BCState Version="1" MinVersion="1">' & @CRLF & _
                '      <TBcState>' & @CRLF & _
                '                <FirstStartup Value="False"/>' & @CRLF & _
                '                <FormPositions>' & @CRLF & _
                '                        <TCheckForUpdatesDialog Value="485;227;880;511"/>' & @CRLF & _
                '                        <TDirLoadErrorDialog Value="488;321;878;417"/>' & @CRLF & _
                '                        <TProfileBrowseDialog Value="383;77;982;660"/>' & @CRLF & _
                '                        <TViewFrame Value="0;0;1366;738"/>' & @CRLF & _
                '                </FormPositions>' & @CRLF & _
                '      </TBcState>' & @CRLF & _
                '      <TCheckForUpdatesState>' & @CRLF & _
                '                <Build Value="25118"/>' & @CRLF & _
                '                <CheckID Value="256591142818099"/>' & @CRLF & _
                '                <LastChecked Value="2020-10-30 10:40:18"/>' & @CRLF & _
                '      </TCheckForUpdatesState>'
;~ MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, '(?mi)^\h*<CheckID Value\="(\d*)"', 1)
If Not @Error Then MsgBox(0, '删除' & $aSRE, StringRegExpReplace($sSource, '(?mi)^(\h*<CheckID Value\=")\d*"', '\1"'))

h111666b 发表于 2020-12-3 18:48:20

谢谢老大,我先试下

kevinch 发表于 2020-12-4 16:48:02

参与一下Local $sSource ='<?xml version="1.0" encoding="UTF-8"?>' & @CRLF & _
                '<!-- Produced by Beyond Compare 4 from Scooter Software -->' & @CRLF & _
                '<BCState Version="1" MinVersion="1">' & @CRLF & _
                '      <TBcState>' & @CRLF & _
                '                <FirstStartup Value="False"/>' & @CRLF & _
                '                <FormPositions>' & @CRLF & _
                '                        <TCheckForUpdatesDialog Value="485;227;880;511"/>' & @CRLF & _
                '                        <TDirLoadErrorDialog Value="488;321;878;417"/>' & @CRLF & _
                '                        <TProfileBrowseDialog Value="383;77;982;660"/>' & @CRLF & _
                '                        <TViewFrame Value="0;0;1366;738"/>' & @CRLF & _
                '                </FormPositions>' & @CRLF & _
                '      </TBcState>' & @CRLF & _
                '      <TCheckForUpdatesState>' & @CRLF & _
                '                <Build Value="25118"/>' & @CRLF & _
                '                <CheckID Value="256591142818099"/>' & @CRLF & _
                '                <LastChecked Value="2020-10-30 10:40:18"/>' & @CRLF & _
                '      </TCheckForUpdatesState>' & @CRLF & _
                                '</BCState>'
$xml=ObjCreate("msxml2.domdocument")
With $xml
        .loadxml($sSource)
        $t=.selectsinglenode("//BCState/TCheckForUpdatesState/CheckID")
        If IsObj($t) Then
                ConsoleWrite($t.getattribute("Value")&@CRLF)
                $t.parentnode.removechild($t)
        EndIf
        ConsoleWrite(.xml&@CRLF)
EndWith

afan 发表于 2020-12-4 18:14:14

kevinch 大侠 搞对象专业户

kevinch 发表于 2020-12-5 11:17:31

afan 发表于 2020-12-4 18:14
kevinch 大侠 搞对象专业户

说的我竟无言以对:face (32):

afan 发表于 2020-12-6 10:47:34

不结贴下次直接扣分。

laycher 发表于 2020-12-6 15:09:20

我怎么觉得sed命令更简单呢。

afan 发表于 2020-12-6 16:01:30

laycher 发表于 2020-12-6 15:09
我怎么觉得sed命令更简单呢。

你确定xml有sed这个方法?秀一个?

laycher 发表于 2020-12-7 21:42:10

我是説linux的sed命令。
windows也可以有这个命令,装下gow就可以。

afan 发表于 2020-12-7 21:44:35

laycher 发表于 2020-12-7 21:42
我是説linux的sed命令。
windows也可以有这个命令,装下gow就可以。

的确更简单,你高兴就好。

h111666b 发表于 2020-12-10 20:35:17

已经测试好了,感谢各位老大,完美解决了
页: [1]
查看完整版本: 读取.xml文本指定行数指定数值并删除,求助