-1

つまり、基本的に私のxmlファイルには、複数行のxmlコードが含まれています。

   <?xml version="1.0" encoding="UTF-8"?> <Stuff>... </stuff>
   <?xml version="1.0" encoding="UTF-8"?> <Stuff>... </stuff>
   ...
  <?xml version="1.0" encoding="UTF-8"?> <Stuff>... </stuff>

そして、私がやりたいのは、これらのコード行の1つで実行できるvbscriptをすべての行で実行できるように変更することです。これを行うにはどうすればよいですか?

編集:ノードの値を変更しており、コードのすべての行で均一に変更しています。

4

1 に答える 1

1

最初の問題は、ファイルにアクセスすることです。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は練習問題として残します。

于 2012-05-08T18:19:53.653 に答える