C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: DOMメソッドでのobjectの取得方法


(過去ログ 67 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■39148 / inTopicNo.1)  DOMメソッドでのobjectの取得方法
  
□投稿者/ りか (1回)-(2009/07/30(Thu) 17:57:03)

分類:[レガシ ASP] 

aspとvbsで、外部API経由で、xmlデータを取得して、XML文書処理を行いたいのですがうまくいきません…

Microsoft.XMLHTTP形式で取得すると、transformNodeメソッドでエラーになるので、
一旦Microsoft.XMLHTTP形式でxmlデータを読み込んで、Microsoft.XMLDOMで再作成してみたのですが、
Microsoft.XMLDOM形式でオブジェクトが取得できないか中身が空でxmlデータが表示されません


どなたかお分かりになる方がいらっしゃいましたらよろしくお願い致しますm(_ _)m

----------------------------

Dim strUrl
Dim strHtml
Dim xml ,xsl,objXML

' データを取得する
Set xml = Server.CreateObject("Microsoft.XMLHTTP")
xml.Open "GET", strUrl, False
xml.Send 'これを使える形に変換(XMLDOM)
strHtml = xml.responseText


'XML取得
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.async = false
objXML.load Server.MapPath("strHtml")


' XSLスタイルシートを取得する
Set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.Load Server.MapPath("atom.xsl")


'スタイルシートを適用
Response.Write(objXML.transformNode(xsl))
引用返信 編集キー/
■39151 / inTopicNo.2)  Re[1]: DOMメソッドでのobjectの取得方法
□投稿者/ 魔界の仮面弁士 (1174回)-(2009/07/30(Thu) 18:53:23)
2009/07/30(Thu) 18:54:14 編集(投稿者)

No39148 (りか さん) に返信
> Set xml = Server.CreateObject("Microsoft.XMLHTTP")
そのオブジェクトは、サーバーサイドでは使用しないでください。

サーバー用途向けには、クライアント用オブジェクトである
 Server.CreateObject("Microsoft.XMLHTTP")
 Server.CreateObject("Microsoft.XMLDOM")
などのかわりに、
 Server.CreateObject("MSXML2.ServerXMLHTTP")
 Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
等を使うことが推奨されています。

# 実際には、どのバージョンの MSXML を使うのかに併せて、
#  Server.CreateObject("MSXML2.ServerXMLHTTP.4.0")
#  Server.CreateObject("MSXML2.ServerXMLHTTP.5.0")
#  Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
# などのように、ProgID の指定を行ってください。

なお、MSXML1 は、XSLT等の規格が定まっていない頃にリリースされているため、
勧告版の実装ではなく、ワーキングドラフト版の実装が行われていたハズです。
可能な限り、後継バージョンの MSXML を利用してください。


> Microsoft.XMLHTTP形式で取得すると、transformNodeメソッドでエラーになるので、
どのような エラーですか?


> xml.Send 'これを使える形に変換(XMLDOM)
> strHtml = xml.responseText
ここで取得した「strHtml」の内容は、意図した値になっていますか?

> objXML.load Server.MapPath("strHtml")
ここで指定している「Server.MapPath("strHtml")」というのは、
先の「strHtml = xml.responseText」とは何の関係もありませんが、
その点は大丈夫でしょうか?


> Response.Write(objXML.transformNode(xsl))
VBScript は、戻り値を取らないメソッドの呼び出しに括弧を使いません。
 Response.Write(data)
ではなく、
 Response.Write data
または
 Call Response.Write(data)
という記述が正しいです。本題とは関係ありませんけれども。
引用返信 編集キー/
■39152 / inTopicNo.3)  Re[2]: DOMメソッドでのobjectの取得方法
□投稿者/ りか (2回)-(2009/07/30(Thu) 19:35:30)
魔界の仮面弁士様
早速の返信ありがとうございます

>>Microsoft.XMLHTTP形式で取得すると、transformNodeメソッドでエラーになるので、
> どのような エラーですか?

Microsoft VBScript 実行時エラー エラー '800a01b6'
オブジェクトでサポートされていないプロパティまたはメソッドです。: 'xml.transformNode'



>>xml.Send 'これを使える形に変換(XMLDOM)
>>strHtml = xml.responseText
> ここで取得した「strHtml」の内容は、意図した値になっていますか?

なっています。
strHtmlにxml形式のデータが取得出来ていることまでは確認が取れてました。

<?xml version="1.0" encoding="utf-8" ?>
<feed>…</feed>


>>objXML.load Server.MapPath("strHtml")
> ここで指定している「Server.MapPath("strHtml")」というのは、
> 先の「strHtml = xml.responseText」とは何の関係もありませんが、
> その点は大丈夫でしょうか?

strHtml に取得したxmlデータが入っているのでそれをDOM形式のobjectに変換できると思ったのですが…
記述が誤っているのでしょうか




>>Response.Write(objXML.transformNode(xsl))
> VBScript は、戻り値を取らないメソッドの呼び出しに括弧を使いません。
>  Response.Write(data)
> ではなく、
>  Response.Write data
> または
>  Call Response.Write(data)
> という記述が正しいです。本題とは関係ありませんけれども。

ありがとうございます。修正します。
引用返信 編集キー/
■39157 / inTopicNo.4)  Re[3]: DOMメソッドでのobjectの取得方法
□投稿者/ 魔界の仮面弁士 (1175回)-(2009/07/30(Thu) 20:13:11)
2009/07/30(Thu) 20:14:26 編集(投稿者)
No39152 (りか さん) に返信
>>>xml.Send 'これを使える形に変換(XMLDOM)
>>>strHtml = xml.responseText
>>ここで取得した「strHtml」の内容は、意図した値になっていますか?
> なっています。
> strHtmlにxml形式のデータが取得出来ていることまでは確認が取れてました。
> <?xml version="1.0" encoding="utf-8" ?>
> <feed>…</feed>

変数名は HTML の名を冠していますが、その実態は XML なのですよね。

DOM が欲しいなら、そのまま responseXML を使えば良いと思うのですが、
一度文字列として受け取ってから、再度作り直しているのは、何のためですか?

 responseText   プロパティ … 文字列用
 responseStream プロパティ … ストリーム用
 responseBody   プロパティ … バイナリ用
 responseXML    プロパティ … XML DOM用


>>> Microsoft.XMLHTTP形式で取得すると、transformNodeメソッドでエラーになるので、
>>どのような エラーですか?
> Microsoft VBScript 実行時エラー エラー '800a01b6' 
> オブジェクトでサポートされていないプロパティまたはメソッドです。: 'xml.transformNode' 

どういう事でしょうか?
先ほど提示されたソースには、どこにも「xml.transformNode」というコードがありませんが…。


>>> objXML.load Server.MapPath("strHtml")
>>ここで指定している「Server.MapPath("strHtml")」というのは、
>>先の「strHtml = xml.responseText」とは何の関係もありませんが、
>>その点は大丈夫でしょうか?
> strHtml に取得したxmlデータが入っているのでそれをDOM形式のobjectに変換できると思ったのですが…
> 記述が誤っているのでしょうか

Server.MapPath("strHtml") の戻り値が、意図した値になっているかどうかを確認されていますか?

Server.MapPath は、ファイルのパスを得るためのメソッドですよね。たとえば、
 Response.Write Server.MapPath("/test/a.asp")
と記述すれば、
 C:\Inetpub\wwwroot\test\a.asp
が得られる、といったように。

本当に、XML ファイルを読み込みたいのであれば、MapPath を利用する事になるでしょうが、
XML 形式の文字列を読み込みたいのであれば、MapPath メソッドも load メソッドも出番は無く、
単に loadXML メソッドを使えば済みますよね。
(もっともその前に、そもそも DOM を作り直す必要があるのか、という根本的な問題がありますが)

引用返信 編集キー/
■39166 / inTopicNo.5)  Re[4]: DOMメソッドでのobjectの取得方法
□投稿者/ りか (3回)-(2009/07/30(Thu) 21:41:30)
魔界の仮面弁士様

> 本当に、XML ファイルを読み込みたいのであれば、MapPath を利用する事になるでしょうが、
> XML 形式の文字列を読み込みたいのであれば、MapPath メソッドも load メソッドも出番は無く、
> 単に loadXML メソッドを使えば済みますよね。
> (もっともその前に、そもそも DOM を作り直す必要があるのか、という根本的な問題がありますが)

ご指摘いただいたとおりloadXMLでうまくいきました。

ちなみに、strHtml = xml.responseTextで一旦テキストに落とすのは、
strHtmlの文字列をreplaceで置換したいためです…


ありがとうございました
-----------------

' データを取得する
Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
xml.Open "GET", strUrl, False
xml.Send 'これを使える形に変換(XMLDOM)
strHtml = xml.responseText

'XML取得
Set objXML = Server.CreateObject("MSXML2.DOMDocument")
objXML.async = false
objXML.loadXML(strHtml)


' XSLスタイルシートを取得する
Set xsl = Server.CreateObject("MSXML2.DOMDocument")
xsl.async = false
xsl.Load Server.MapPath("atom.xsl")


' XMLにXSLを被せる
Response.Write(objXML.transformNode(xsl))
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -