- ベストアンサー
VBAのプログラムでXMLのencoding属性が削除されてしまう問題
- VBAのプログラムでXMLのencoding属性が削除されてしまう問題についてです。
- セッションのロード中に、encoding属性が削除されてしまう現象が発生しています。
- encoding属性を保持しながらXMLをロードする方法について、アドバイスをいただきたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
transformNodeToObjectの解説には以下のようにあります。該当しませんか? The transformNodeToObject method always generates a Unicode byte-order mark, which means it cannot be used in conjunction with other Active Server Pages (ASP) Response.Write or Response.BinaryWrite calls.
その他の回答 (3)
- MetalKing
- ベストアンサー率57% (15/26)
"テキストの内容に無効な文字が見つかりました" 文字列のエンコーディングとencodingの属性が一致していないのではないですか? encoding属性を付加しても変換を行ってくれるわけではないので、正しく指定する必要があります
補足
ご回答ありがとうございます。 正しくしてする必要があるとのことですが、 Session("ServiceInfo")、AddElDoc DomDomでしょうか。 また、指定の方法をご教授頂けますでしょうか。 ※ Session("ServiceInfo"):変換元XML AddElDoc:変換用XSLT DomDom:変換先オブジェクト
- MetalKing
- ベストアンサー率57% (15/26)
ちょっと気になったことが...外してそうな気もしますが > 、<?xml version="1.0?>しか付加できませんでした。 は、DomDomを何らかの形で出力して確認したってことですよね?どんな方法で出力したんでしょう? xmlプロパティを使用してDOMの内容を覗くと、encoding属性が見えません。これを回避するにはsaveメソッドを使用する必要があります。
補足
ご回答ありがとうございます。 xmlプロパティを使用して出力しましたのでご回答どおりです。 ということは、以下の処理でパースエラーがでたのは、なぜなのでしょうか? Session("ServiceInfo")をxmlプロパティで出力したものをAddElDoc(変換用XSL)で変換するとパースエラーは出ないのですが、TransformNodeToObjectを使用するとパースエラーが出てしまいます。 <<パースエラーが発生した処理>> Session("ServiceInfo").TransformNodeToObject AddElDoc,DomDom
- MetalKing
- ベストアンサー率57% (15/26)
MSXMLではencodingを保持しているように見えるのですが、なにをもってして > encoding属性が削除されてしまいます。 という結論を出されたのでしょうか? なぜ自分で指定した属性をDOMを通して取得したいのでしょう?
補足
すみません説明がたりませんで。 LoadXMLでロードしたDOM(Session("ServiceInfo"))を、AddElDocというXSLで加工して、DomDomというDOMへ格納しようとしたところ、"テキストの内容に無効な文字が見つかりました"というパースエラーが発生しました。 Session("ServiceInfo")の中を確認しますと、XML宣言がなくそれをLoadXMLで付加しようとしたところ、<?xml version="1.0?>しか付加できませんでした。 <<パースエラーが発生した処理>> Session("ServiceInfo").TransformNodeToObject AddElDoc,DomDom 以上、宜しくお願いいたします。
補足
ご回答ありがとうございます。 Session("ServiceInfo")に日本語が混在している為、パースエラーが発生したと考え、encoding属性を付加しようと考えました。他の理由で、"テキストの内容に無効な文字が見つかりました"ということになるのでしょうか。 何か良い方法はございますでしょうか。 BinaryWrite を使用するということでしょうか。