XML_HTMLSax
довольно стабилен - даже если он больше не поддерживается. Другой вариант может заключаться в том, чтобы передать вам HTML через Html Tidy , а затем проанализировать его стандартными инструментами XML.
Вы не можете читать и писать из / в один и тот же файл одновременно. Не с StreamReader
и StreamWriter
, ни с любым другим обычным методом. Если вам необходимо изменить существующий файл и не можете (или не хотите) читать весь его контент в памяти, вы должны записать измененный контент во временный файл, а затем заменить оригинал на временный файл после закрытия обоих файлов.
Пример:
$filename = (Get-Item $file).Name
$streamReader = New-Object IO.StreamReader -Arg $file
$streamWriter = [System.IO.StreamWriter] "$file.tmp"
...
$streamReader.Close(); $streamReader.Dispose()
$streamWriter.Close(); $streamWriter.Dispose()
Remove-Item $file -Force
Rename-Item "$file.tmp" -NewName $filename
if ( $my_infile.Length -gt 0 ) {
[string] $full_name_infile = $my_dir + "\" + $my_infile
$f1 = Get-Content($full_name_infile) -ErrorAction Stop
if ( $f1.count -gt 0 ) {
[string] $fout1_dir = $my_dir
[string] $fout1_name = $fout1_dir + "\" + $my_infile + ".temp"
$fmode = [System.IO.FileMode]::Append
$faccess = [System.IO.FileAccess]::Write
$fshare = [System.IO.FileShare]::None
$fencode = [System.Text.ASCIIEncoding]::ASCII
$stream1 = New-Object System.IO.FileStream $fout1_name, $fmode, $faccess, $fshare
$fout1 = new-object System.IO.StreamWriter $stream1, $fencode
}
for ( $x=0; $x -lt $f1.count; $x++ ) {
$line = $f1.Get( $x )
if ( $line.length -eq 0 ) {
$nop=1
} else {
if ( $line.Substring( $line.Length-1 , 1 ) -eq "," ) { $line = $line + " "; }
$fout1.WriteLine( $line );
}
}
$fout1.Close()
$fout1.Dispose()
move-item $fout1_name $full_name_infile -force
}