-1

以下に示すコードの最後の行に到達するまで、この小さな VBS スクリプトのすべてが正常に機能します。その行に到達すると、スクリプトはエラー「パラメーター 80070057 が正しくありません。

グーグルでかなりの時間を費やした後、エラーコードはほぼ同じことを意味し、パラメーターが正しくないことがわかりました。

'section 15
Set lots = xmlDoc3.selectNodes("ArrayOfLot/Lot")

For Each lot in lots
    Dim nl: Set nl = lot.cloneNode(true)
    xmlDoc4.documentElement.appendChild nl
Next

xmlDoc4.save xmlDoc4.url 'this code works

'**************************************************************************
'section 16 
Set lots = xmlDoc5.selectNodes("ArrayOfLot/Lot")

For Each lot in lots
    Dim nll: Set nll = lot.cloneNode(true)
    xmlDoc6.documentElement.appendChild nll
Next

xmlDoc6.save xmlDoc6.url 'this does not work - error thrown

.save はその 8 行上で機能するため、非常にイライラします。私の問題が何であるか、そしてそれをどのように解決できるかについての洞察を誰かが持っていますか?

以下の回答に基づいて、すべてのドキュメント情報が宣言されるコードを投稿しています。

Dim xmlFilePath6: xmlFilePath6 = "section16.xml"
Dim xmlDoc6: set xmlDoc6 = CreateObject("MSXML2.DomDocument")
xmlDoc6.async = "false"
xmlDoc6.load xmlFilePath6

これは、実際には 6 つの異なるドキュメントに対して行われ、6 を他の数字の 1 ~ 8 のいずれかに代入します。section16.xml が存在し、ロード時にエラーがスローされないため、私はまだ困惑しています。

4

1 に答える 1

2

更新:xmlDoc6ファイルに関連付けられないようにコードを調整し、エラーを再現しました:

demo.vbs(67, 1) msxml3.dll: The parameter is incorrect.

これの代わりにエラーを再現するには:

xmlDoc6.load "xmlDoc6.xml"

...私はxmlDoc6このように初期化しました:

xmlDoc6.loadXML xmlText

Hunch:xmlDoc6がファイルに関連付けられていることを確認してください。そうでない場合、 の値はxmlDoc6.url空の文字列になります。


ORIGINAL:ユースケースを説明する完全なプログラムを作成しました。ただし、 をincorrect parameter試みたときに報告されたエラーが表示されませんxmlDoc6.save xmlDoc6.url。しかし、おそらく私のプログラムの何かが際立って、あなたを解決に導くでしょう.

興味のある方は、このプログラムを実行するには、テキストを say, という名前のファイルにコピーしてから、次の方法demo.vbsで実行します。

cscript demo.vbs

コンソールへの出力は次のようになります。

Creating XML documents 3 through 6.
Saving file:///c:/Users/DavidRR/temp/xmlDoc4.xml
Saving file:///c:/Users/DavidRR/temp/xmlDoc6.xml
Done.

' demo.vbs - Use MSXML to edit and save multiple XML files.

Option Explicit

Dim xmlText : xmlText = "" _
    & "<?xml version='1.0' encoding='utf-8'?>" _
    & "<ArrayOfLot>" _
    & "  <Lot>" _
    & "    Lot One" _
    & "  </Lot>" _
    & "  <Lot>" _
    & "    Lot Two" _
    & "  </Lot>" _
    & "  <Lot>" _
    & "    Lot Three" _
    & "  </Lot>" _
    & "</ArrayOfLot>" _
    & ""

WScript.Echo "Creating XML documents 3 through 6."

Dim  xmlDoc3 : Set xmlDoc3 = CreateObject("Msxml2.DOMDocument")
Dim  xmlDoc4 : Set xmlDoc4 = CreateObject("Msxml2.DOMDocument")
Dim  xmlDoc5 : Set xmlDoc5 = CreateObject("Msxml2.DOMDocument")
Dim  xmlDoc6 : Set xmlDoc6 = CreateObject("Msxml2.DOMDocument")

xmlDoc3.loadXML xmlText
If xmlDoc3.parseError.errorCode <> 0 Then
    WScript.Echo "Couldn't load xmlDoc3: " & xmlDoc3.parseError.reason
    WScript.Quit(1)
Else
    ' WScript.Echo "Loaded XML [" & xmlDoc3.documentElement.xml & "]"
End If

' WScript.Echo xmlDoc3.Xml
xmlDoc3.save "xmlDoc4.xml"
xmlDoc3.save "xmlDoc5.xml"
xmlDoc3.save "xmlDoc6.xml"

xmlDoc4.load "xmlDoc4.xml"
xmlDoc5.load "xmlDoc5.xml"
xmlDoc6.load "xmlDoc6.xml"
' xmlDoc6.loadXML xmlText
' WScript.Echo "xmlDoc6.url = [" & xmlDoc6.url & "]"

' section 15
Set lots = xmlDoc3.selectNodes("ArrayOfLot/Lot")
' WScript.Echo lots.length

Dim lot, lots
For Each lot In lots
    Dim nl: Set nl = lot.cloneNode(True)
    xmlDoc4.documentElement.appendChild nl
Next

WScript.Echo "Saving " & xmlDoc4.url
xmlDoc4.save xmlDoc4.url 'this code works

'**************************************************************************
' section 16
Set lots = xmlDoc5.selectNodes("ArrayOfLot/Lot")

For Each lot in lots
    Dim nll: Set nll = lot.cloneNode(true)
    xmlDoc6.documentElement.appendChild nll
Next

WScript.Echo "Saving " & xmlDoc6.url
xmlDoc6.save xmlDoc6.url ' reportedly does not work...but it works here.

Set xmlDoc6 = Nothing
Set xmlDoc5 = Nothing
Set xmlDoc4 = Nothing
Set xmlDoc3 = Nothing

WScript.Echo "Done."

' End
于 2012-09-15T02:59:27.720 に答える