2012-03-15 4 views
6

XMLファイルで私のためにいくつかのデータを操作するスクリプトを作成しようとしています。私はVBScriptをかなり新しくしていますが、VB.NETとVBAのバックグラウンドを持っているので、自分が何をしているのか分かります。ダミー用のVBScriptでXMLノードをナビゲートする

私が探しているものがあるかどうかを確認するために、各行のInStr()などを呼び出すのではなく、ファイルをナビゲートする方がよいと思いました。私の最初のアイデアは、VB.NETでSystem.XMLから見たいくつかのメソッドを使用することでした。なぜなら、ノード内で関数とメンバーをナビゲートするのを見ていたからです。

これを調べた後、Webページ上で実行されていない名前空間(System.XMLなど)をVBScriptにインポートする方法が見つかりませんでした。私はこれを探して時間を費やすのではなく、他の選択肢を探すことにしました。

XMLファイルのノードのナビゲートを具体的に扱うメソッドやオブジェクトを使用して、他にも必要なことができます。私は、これらの「システム」のいくつかの一般的な例が、DOMとXPathのように見えることを学びました。

私はXPathを調べて始めました(私はXPathがDOMより優れていると考えていたので、いくつかの場所で:Traversing all nodes in an XML file with VBScript)。私はvbscriptでXPathの基礎を書き留めることができませんでした。パスなどのシンタックスに関する構文がたくさんありますが、VBScriptでその構文を実際に呼び出す方法の基本を説明するものは何も見つかりませんでした。そこで次の選択肢に移りました。

私は、DOMに関する多くの少し異なる記事/質問/ etcを見つけました。だから私は試してみました。それらのうちの1つが働いたわけではありませんが、すべて私にエラーを与えました。ほとんどの場合、DOMオブジェクトは決して正しくロードされないように見えました。

MSDN: a beginner's guide to XML DOMから::これは失敗を毎回返さ

Set objParser = CreateObject("Microsoft.XMLDOM") 
Dim xDoc As MSXML.DOMDocument 
Set xDoc = New MSXML.DOMDocument 

If xDoc.Load("C:\My Documents\cds.xml") Then 
    msgbox("Success!") 
Else 
    msgbox("Failure!") 
End If 

ここで私はこのために試みている方法のほんの一部です。

Based on another method

dim xmlDom 
set xmlDom = createobject("MSXML2.DOMDocument") 
xmlDom.async = false 
xmlDom.load ("C:\MyFileLocation\MyFile.xml") 

、その後、私はそれがxmlDom.documentElement内の各ノード名のメッセージボックスのように働いたかどうかを検出するためにいくつかのことを試してみました。

私はそれらのほとんどを覚えていないので、他の多くのことを試みました。

私は単に何を試すことができるのか、なぜこれが私のために働いていないのか分かりません。私は単純に別の方法を試すことができますが、それでも構文が使えるのは失われてしまいます。

私の質問は次のとおりです。スクリプトをウェブページなどに埋め込まずに、VBScriptを使用してXMLファイルをナビゲートするにはどうすればよいですか?私は極端な基礎を知る必要があります。

これは簡単に利用できる情報なので、私の質問はおそらく愚かであるように思えますが、私の人生は本当に不可能です。基本的なことを見つけることができます。VBScriptだけを使ってノードをナビゲートする方法を理解する必要があります。 HTMLやASPファイルなど)。ここで

+0

最初の方法は、VBA用に書かれているため、VBScriptでは決して機能しません。それは違った風味です。 VBScriptでは、 'Dim XDoc As MSXML.Document'のような変数に型を割り当てることはできません。それを薄暗くして、2番目の方法のように新しく作成した文書で設定する必要があります。 2番目のメソッドのエラーはパス名です。これは文字列 'xmlDom.load" C:\ MyFileLocation \ MyFile.xml "でなければなりません。あなたの質問は無知ではない、VBScriptとXMLデータは少し難しい。この方法はあまり明確ではなく、あまりよく説明されていません。 fmunkertの例はあなたに良いスタートを与えるでしょう。 – AutomatedChaos

+0

実際には、第2の方法のエラーは、ここで私が信じているコードを転送する私のエラーでした。私はかなり前に文字列として試したと確信しています。しかし、それを指摘してくれてありがとう!また、vb vs vbscriptについて少し感謝します.msdnページでは、最初の行はvbscriptで例を示し、残りはvbaにあります。ありがとうmsdn:/ – user1167662

答えて

15

は小さな一例です:

は、ファイルはこの内容でC:\Temp\Test.xmlと呼ばれていると仮定:

<?xml version="1.0"?> 
<root> 
    <property name="alpha" value="1"/> 
    <property name="beta" value="2"/> 
    <property name="gamma" value="3"/> 
</root> 

次にあなたがこのVBScriptを使用することができます。

Set objDoc = CreateObject("MSXML.DOMDocument") 
objDoc.Load "C:\Temp\Test.xml" 

' Iterate over all elements contained in the <root> element: 

Set objRoot = objDoc.documentElement 
s = "" 
t = "" 
For Each child in objRoot.childNodes 
    s = s & child.getAttribute("name") & " " 
    t = t & child.getAttribute("value") & " " 
Next 
MsgBox s ' Displays "alpha beta gamma " 
MsgBox t ' Displays "1 2 3 " 

' Find a particular element using XPath: 

Set objNode = objDoc.selectSingleNode("/root/property[@name='beta']") 
MsgBox objNode.getAttribute("value")  ' Displays 2 

私はこれが役に立てば幸いVBScriptとXMLを使い始めました。

+0

ありがとうSOOO多く!!!!!これは非常に役に立ちました!これはすべてではありませんが、残りの部分を把握できるようにボールを回転させるには十分です。もう一度感謝します! – user1167662

+0

DOMDocumentに関連する他の有用なメソッドやメンバは何ですか?よく文書化されたどこにでもありますか?私はこの時点で、「selectnodeswhich ...」型のメソッドや、複数のノードを1つではなく複数選択することについて、特に不思議に思っています。 – user1167662

+3

IDOMDocumentのメソッドとプロパティのリストは、http://msdn.microsoft.com/en-us/library/windows/desktop/ms757878(v=vs.85).aspxにあります。複数のノードを選択するには、XPathと一緒に 'selectNodes'を使います。 XPathに精通していない場合は、http://www.w3schools.com/xpath/xpath_intro.aspのチュートリアルを読んでください。 –

関連する問題