最初の問題は、ファイルにアクセスすることです。VBScript/FileSystemObject は UTF-8 での読み取り/書き込みをサポートしていないため、おそらく ADODB.Stream を使用する必要があります。各行に整形式/有効な XML ドキュメントが含まれている場合<Stuff> ... </stuff>
(単なるタイプミスです)、.LoadXml を使用して文字列/行を Msxml2.DOMDocument にフィードする必要があります。次に、おそらく「ノードの変更」コードを適用できます。
追加した:
アプローチを示す概念実証コード:
Dim sIFSpec : sIFSpec = goFS.GetAbsolutePathName("..\data\01.xml")
Dim sOFSpec : sOFSpec = goFS.GetAbsolutePathName("..\data\01-1.xml")
Dim oXD : Set oXD = CreateObject("Msxml2.DOMDocument")
Dim sXPath : sXPath = "/stuff/name"
Dim aLines : aLines = Split(readAllFromFileUTF8(sIFSpec), vbCrLf)
WScript.Echo Join(aLines, vbCrLf)
Dim nLine, sLine, ndFnd
For nLine = 0 To UBound(aLines)
sLine = aLines(nLine)
If "" <> sLine Then
oXD.LoadXml sLine
Set ndFnd = oXD.selectSingleNode( sXPath )
If ndFnd Is Nothing Then
WScript.Echo "|", sXPath, "| not found"
Else
WScript.Echo "found |" & ndFnd.text & "|"
ndFnd.text = "Ekkehard Hörner"
aLines(nLine) = Replace(oXD.xml, vbCrLf, "")
End If
End If
Next
writeAllToFileUTF8 sOFSpec, Join(aLines, vbCrLf)
WScript.Echo Join(aLines, vbCrLf)
出力:
<?xml version="1.0" encoding="UTF-8"?> <stuff><num>1</num><name>Hörner</name></stuff>
<?xml version="1.0" encoding="UTF-8"?> <stuff><num>2</num><name>Hörner</name></stuff>
<?xml version="1.0" encoding="UTF-8"?> <stuff><num>3</num><name>Hörner</name></stuff>
found |Hörner|
found |Hörner|
found |Hörner|
<?xml version="1.0"?><stuff><num>1</num><name>Ekkehard Hörner</name></stuff>
<?xml version="1.0"?><stuff><num>2</num><name>Ekkehard Hörner</name></stuff>
<?xml version="1.0"?><stuff><num>3</num><name>Ekkehard Hörner</name></stuff>
関数readAllFromFileUTF8
とサブwriteAllToFileUTF8
は練習問題として残します。