いつもお世話になっております。
今、XMLファイルを開き、その中のValueを表示する、というプログラムを考えています。
getAttributeで指定すれば取れる、というのは聞いたのですが、その前にXMLファイルを取得できていないようなのです。
Dim xmlDoc As MSXML.DOMDocument
Dim xmlEle As MSXML.IXMLDOMElement
Set xmlDoc = New MSXML.DOMDocument
xmlDoc.load ("C:\test.xml")
set xmlEle = xmlDoc.documentElement
としたところ、xmlEleがnothingなのです。
xmlDoc内の parseErrorには、「ドキュメントの最上位には無効です。」
という文字が入っています。
正直全くわかりません。
どこが間違いなのかご教授いただければ幸いです。
よろしくお願いします。
# どうせなら、最新版の MSXML4 を使った方が良いかも。
> xmlDoc.load ("C:\test.xml")
この load メソッドが、True を返しているかどうかを確認してください。
Falseが返されている場合は、読み込み時にエラーが発生しています。
> 「ドキュメントの最上位には無効です。」
XMLファイル自体が間違っているという事はありませんか?
> > 「ドキュメントの最上位には無効です。」
> XMLファイル自体が間違っているという事はありませんか?
IEでXMLファイルを開くと、整形式じゃなかったらエラーが
表示されるので便利です。
早速の回答ありがとうございます。
ご指摘のとおり、XMLそのものが間違えていました。
ただ、同じファイルでも家のPCでは開けるのに、会社のPCでは開けませんでした。
これってIEのバージョンに依存されたりするのでしょうか?
それとも、マクロで実行しているので
EXCELのバージョンなのでしょうか?
あと、メソッドの違いについて質問なのですが、
selectSingleNodeと、selectNodes
の違いって何なんでしょうか?
質問ばかりですいません。
よろしくお願いいたします。
> ただ、同じファイルでも家のPCでは開けるのに、会社のPCでは開けませんでした。
具体的にはどのような内容のXMLで、XML中のどの部分に問題があったのでしょうか?
> これってIEのバージョンに依存されたりするのでしょうか?
IEのバージョンというよりも、XMLパーサのバージョンに依存する事があります。
> あと、メソッドの違いについて質問なのですが、
> selectSingleNodeと、selectNodes
> の違いって何なんでしょうか?
まず、どちらも標準のAPIではありません。Microsoftの独自拡張命令です。
機能としては、「XSLPattern(またはXPath)にて指定したノードを返す」という物です。
後者がselectNodeではなく、selectNodesと[複数形]になっている事からも想像できますように、前者は「単一のノード」を返し、後者は「複数のノード」を返します。
指定された条件に一致するノードが複数あった場合、後者はそれら全てをまとめたコレクション(IXMLDOMNodeListインターフェイス)を返しますが、前者は先頭のノードだけを返します。
また、指定したノードが無い場合は、前者は Nothing を返します。詳細はSDKを参照してみてください。
Set X = 〜.selectSingleNode(S)
If X Is Nothing Then
MsgBox "見つからない"
End If
Set X = 〜.selectNodes(S)
If X.length = 0 Then
MsgBox "見つからない"
End If
ツイート | ![]() |