<?xml version="1.0" encoding="UTF-8" ?>
<result>
<status>success</status>
<file>
<ccd>AAAAAAAAAAAA</ccd>
<count>1</count>
</file>
<file>
<ccd>BBBBBBBBBBBB</ccd>
<count>2</count>
</file>
<file>
<ccd>DDDDDDDDDDDD</ccd>
<count>3</count>
</file>
<file>
<ccd>EEEEEEEEEEEE</ccd>
<count>1</count>
</file>
上記XMLファイルから
ccdの値とcountの値を2つを取得したいのですがうまくいきません。
どのすればよいか・・・、ご指摘お願いします。
ccdのみ取得の場合、以下のロジックで成功しています。
Dim MSxml As Object
Set MSxml = CreateObject("Microsoft.XMLHTTP")
MSxml.Open "POST", "http://www.xxx.net/XXX/XXXsearch.do", False
MSxml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
MSxml.send ("ccount=" & strGroupid & "&pass=" & strPass)
Set xmldoc = CreateObject("Microsoft.XMLDOM")
i = 0
xmldoc.async = "false"
bSuccess = xmldoc.Load(GPSxml.responseXML)
If bSuccess Then
For Each Node In xmldoc.documentElement.getElementsByTagName("file")
Debug.Print Node.Text
end for
end if
> 上記XMLファイルから
あれれ。<?xml の前に、余計な空白が含まれていたり、result 要素が
閉じられていないなど、XML としては不正な形式になっているような。(^^;
> xmldoc.async = "false"
何故に文字列?
async プロパティのデータ型は、String ではなく、Boolean ですよね。
> end for
そのような構文はありません。(^^;
> 以下のロジックで成功しています。
コードは間違っていますが、ロジックは概ねあっていると思いますよ。
file要素の下位要素を、個別に取り出すのであれば、
> Debug.Print Node.Text
の部分を、
Debug.Print Node.childNodes(0).text
Debug.Print Node.childNodes(1).text
だとか、
Debug.Print Node.Node.getElementsByTagName("ccd")(0).text
Debug.Print Node.Node.getElementsByTagName("count")(0).text
などに置き換えてみると良いでしょう。
あるいは、
For Each Node In xmldoc.selectNodes("//count|//ccd")
'Debug.Print Node.tagName
Debug.Print Node.text
Next
などといった書き方も使えるかも知れません。
解決できました。一部間違いもありすいませんでした・・・。
Dim MSxml As Object
Set MSxml = CreateObject("Microsoft.XMLHTTP")
MSxml.Open "POST", "http://www.xxx.net/XXX/XXXsearch.do", False
MSxml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
MSxml.send ("ccount=" & strGroupid & "&pass=" & strPass)
Set xmldoc = CreateObject("Microsoft.XMLDOM")
i = 0
xmldoc.async = "Boolean"
bSuccess = xmldoc.Load(GPSxml.responseXML)
If bSuccess Then
For Each Node In xmldoc.documentElement.getElementsByTagName("file")
Debug.Print Node.childNodes(0).text
Debug.Print Node.childNodes(1).text
Next
end if
で取得できました。
ツイート | ![]() |