VBAのプログラムでXMLのencoding属性が削除されてしまう問題

このQ&Aのポイント
  • VBAのプログラムでXMLのencoding属性が削除されてしまう問題についてです。
  • セッションのロード中に、encoding属性が削除されてしまう現象が発生しています。
  • encoding属性を保持しながらXMLをロードする方法について、アドバイスをいただきたいです。
回答を見る
  • ベストアンサー

LoadCML

宜しくお願いいたします。 下記のプログラムで、 set Session("ServiceInfo") = CreateObject("MSXML2.DOMDocument.3.0") Session("ServiceInfo").Async = False Session("ServiceInfo").LoadXML "<?xml version=""1.0"" encoding=""Shift_JIS"" ?>" & Session("RoeApi").ReturnXml.xml とやると、encoding属性が削除されてしまいます。 どうにかencoding属性までロードしたいのですが どなたかご教授頂けないでしょうか。

  • XML
  • 回答数4
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.3

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.

aaakar
質問者

補足

ご回答ありがとうございます。 Session("ServiceInfo")に日本語が混在している為、パースエラーが発生したと考え、encoding属性を付加しようと考えました。他の理由で、"テキストの内容に無効な文字が見つかりました"ということになるのでしょうか。 何か良い方法はございますでしょうか。 BinaryWrite を使用するということでしょうか。

その他の回答 (3)

  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.4

"テキストの内容に無効な文字が見つかりました" 文字列のエンコーディングとencodingの属性が一致していないのではないですか? encoding属性を付加しても変換を行ってくれるわけではないので、正しく指定する必要があります

aaakar
質問者

補足

ご回答ありがとうございます。 正しくしてする必要があるとのことですが、 Session("ServiceInfo")、AddElDoc DomDomでしょうか。 また、指定の方法をご教授頂けますでしょうか。 ※ Session("ServiceInfo"):変換元XML AddElDoc:変換用XSLT DomDom:変換先オブジェクト

  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.2

ちょっと気になったことが...外してそうな気もしますが > 、<?xml version="1.0?>しか付加できませんでした。 は、DomDomを何らかの形で出力して確認したってことですよね?どんな方法で出力したんでしょう?  xmlプロパティを使用してDOMの内容を覗くと、encoding属性が見えません。これを回避するにはsaveメソッドを使用する必要があります。

参考URL:
http://msdn.microsoft.com/library/en-us/xmlsdk/html/xmproxml.asp?frame=true
aaakar
質問者

補足

ご回答ありがとうございます。 xmlプロパティを使用して出力しましたのでご回答どおりです。 ということは、以下の処理でパースエラーがでたのは、なぜなのでしょうか? Session("ServiceInfo")をxmlプロパティで出力したものをAddElDoc(変換用XSL)で変換するとパースエラーは出ないのですが、TransformNodeToObjectを使用するとパースエラーが出てしまいます。 <<パースエラーが発生した処理>> Session("ServiceInfo").TransformNodeToObject AddElDoc,DomDom

  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.1

MSXMLではencodingを保持しているように見えるのですが、なにをもってして > encoding属性が削除されてしまいます。 という結論を出されたのでしょうか? なぜ自分で指定した属性をDOMを通して取得したいのでしょう?

aaakar
質問者

補足

すみません説明がたりませんで。 LoadXMLでロードしたDOM(Session("ServiceInfo"))を、AddElDocというXSLで加工して、DomDomというDOMへ格納しようとしたところ、"テキストの内容に無効な文字が見つかりました"というパースエラーが発生しました。 Session("ServiceInfo")の中を確認しますと、XML宣言がなくそれをLoadXMLで付加しようとしたところ、<?xml version="1.0?>しか付加できませんでした。 <<パースエラーが発生した処理>> Session("ServiceInfo").TransformNodeToObject AddElDoc,DomDom 以上、宜しくお願いいたします。

関連するQ&A

  • XMLファイルのattribute値を取得するには?

    ASP内の処理でwebからXMLファイルをLoadし、 そこからattribute値を取得するにはどうすればよいのでしょうか? ちなみにXMLファイル取得は成功しています。 使用スクリプトはVBscriptです。 以下がロードしたXMLファイルの内容です。 <?xml version="1.0" encoding="Shift_JIS" ?> <xml> <AAA width="2.15" <--この2.15と height="4.60" <--この4.60を取得したい /> </xml> 以下が今、途中まで作っているソースです。 <% language = "VBscript" %> <% Dim XmlDoc, objXmlError, objXmlNode Set XmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.async = false XmlDoc.setProperty "ServerHTTPRequest", true XmlDoc.load("http://localhost/test.xml") Set objXmlNode = XmlDoc.selectNodes("/root/AAA") ここから先がよくわからない %>

  • [VBA] MSXML2.DOMDocument

    MSXML2.DOMDocument を用いて、xml のデータを取得しています。 相手のサーバーがダウンしていると、 Dim xmlDoc As New MSXML2.DOMDocument xmlDoc.async = False xmlDoc.Load (taisyoURL) ↑ この部分でフリーズしてしまい、それ以降続行できません。 false も返ってくるわけではないのでどうしたらよいのか 困っております。 タイムアウト又は何かしらの方法でエラー処理をさせる ことはできますでしょうか?

  • VBAのXML処理でメモリが足りない?

    Excel2003のVBAでMSXML2.DomDocumentを使ってXMLの処理をしています。http経由でXMLを取得し、パースして、Sheetに書き込んでいます。 XMLの行数が少ないうちは問題ないのですが、行数が1600件を超えたあたりで、LoadXML()メソッドで落ちます。 XMLを分割して、500行ずつや100行ずつLoadXMLさせても、合計処理数が1600行あたりで、必ずLoadXML()に失敗します。 メモリ不足かと思って、ループするごごとにSet Dom = Nothingのようにしてオブジェクトをクリアしていますが、効果がありません。 処理させたいXMLは最大で8000行になります。 なんとか解決策はないでしょうか? 以下、ソースの一部です。 Dim Dom As New MSXML2.DOMDocument Function get_xml_dom(query) Dim MSX As Object Set Dom = New MSXML2.DOMDocument Dim Url As String host_address = "hostname" host_path = "/keyword_report/get_keyword_data" Url = "http://" & host_address & host_path & query Set MSX = CreateObject("MSXML2.XMLHTTP") MSX.Open "GET", Url, False MSX.Send If Dom.LoadXML(MSX.responseText) Then '<- 1600件ぐらい処理させるとここで落ちる Debug.Print "Load XML is True" get_xml_dom = True Else get_xml_dom = False Debug.Print "Load XML is False" End If Set MSX = Nothing End Function このあと、DomからXPATHで要素を取り出して、シートに埋め込んでいます。

  • DOMで\\localhost\~がloadできません

    DOMについて質問させてください。 DOMで\\localhost\~\test.xmlをloadすると、「指定されたパスが見つかりません。」が表示されloadできません。ちなみに、ループバックアドレスの\\127.0.0.1だとうまくいきます。なぜか理由が分からないため質問させていただきました。\\localhostでloadするには何かwindowsの設定がいるのでしょうか? ・再現手順は以下の通りです。 (1)DOMでCドライブ配下にサブフォルダを作成し、そのサブフォルダ内に共有フォルダを作成します。 (2)作成した共有フォルダ内にxmlファイルを格納します。 (3)DOMで共有フォルダ内のxmlファイルをロードするとエラーになります。 以下、サンプルコードです。(MSXMLのバージョンはどのバージョンでも現象は同じ) '================================================== Set objDOM = CreateObject("MSXML2.DOMDocument.6.0") objDOM.async = false rtResult = objDOM.load("\\localhost\~\test.xml") msgbox "load:" & rtResult & " エラー番号:" & objDOM.parseError.errorCode & " MSG:" & objDOM.parseError.reason Set objDOM = Nothing '==================================================

    • 締切済み
    • XML
  • VBAでXMLを出力するプログラムを作成する際の名前空間接頭辞の付与の仕方について

    今、Excel付属のVBAを使用して、XMLを作成するプログラムを作成しております。 その際、名前空間(及び接頭辞)を付与したいのですが、方法が分からず苦慮しております。 VB.NET等での方法はわかったのですが、職場の開発環境上、VBAでなんとか対応したいところです。 もし何かご存知の方、いらっしゃいましたら、どうか教えていただきたく、よろしくお願いいたします。 ===作成したいXML=== <?xml version="1.0" encoding="Shift_JIS" ?> - <Root> - <YOUSO xmlns:BBB="http://aaa.aa.aaa"> <YOSO2>AAAAAAA</YOSO2> </YOUSO> </Root> ===現在このようなXMLになってしまっております。=== <?xml version="1.0" encoding="Shift_JIS" ?> - <Root> - <YOUSO xmlns="http://aaa.aa.aaa"> <YOSO2 xmlns="">AAAAAAA</YOSO2> </YOUSO> </Root> ===作成したコード=== Sub TEST() Dim xmlDoc As MSXML2.DOMDocument Dim xmlPI As IXMLDOMProcessingInstruction Dim node(3) As IXMLDOMNode Set xmlDoc = New MSXML2.DOMDocument 'XML宣言 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""Shift_JIS""")) '<Root>要素 Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "Root", "")) '<YOSO1>要素 Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "YOUSO", "http://aaa.aa.aaa")) '<YOUSO2>要素 Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "YOUSO2", "")) node(3).Text = "AAAAAAA" 'XMLドキュメントの出力 xmlDoc.Save ("customer.xml") End Sub ============================ よろしくお願いいたします。

  • DOCUMENT行の書き出しについて

    VC++にてmsxml3.dllをインポートし MSXML2インタフェースで以下の2行目を書出したいのですが 方法を知っている方いませんか? <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE DATAINFO SYSTEM "BED0001.DTD"> よろしくお願いします。

    • 締切済み
    • XML
  • VBscriptでXMLのファイルから、XPathで指定したデータを読

    VBscriptでXMLのファイルから、XPathで指定したデータを読み込みたいと思っていますが、 XMLファイル中に指定したXPathのタグがない場合、"オブジェクトがありません。" というエラーになってしまいます。 このような場合、どのような処理にすれば良いのでしょうか?親タグ、子タグなどを総当りで、存在するか調べないといけないのでしょうか?以下のようなスクリプトです。 Set xmlDoc = WScript.CreateObject("MSXML2.DOMDocument") With xmlDoc .Async = False .Load("aaaa.xml") xpath01 = "/tag1/tag2/tag3" Set xmlNode = .selectSingleNode(xpath01) MsgBox xmlNode.text End With

  • VB2005 で encoding="Shift_JIS"や"EUC-JP"のXMLファイルを保存する方法

    VB2005, XML の初心者です。 VB2005で encoding="Shift_JIS" や "EUC-JP" のXMLデータをファイルに保存するにはどうすれば良いのでしょうか。 encoding="UTF-8"であれば、下記で保存できますが、="Shift_JIS" や "EUC-JP" になると保存でエラーになってしまいます。 下記ソースでは、strXMLには正しくXMLが入っていますが、saveするとエラーになり、ファイルの中身を確認すると、日本語の箇所で切れていました。 Public Client As TcpClient Dim stream As NetworkStream stream = Client.GetStream() Dim Data(10000) As Byte Dim len As Int16 = stream.Read(Data, 0, Data.Length) strXML = System.Text.Encoding.UTF8.GetString(Data, 0, len) MsxmlDoc = New MSXML2.DOMDocument Msxmldoc.Loadxml(strXML) MsxmlDoc.save ( "C:\XML.xml") 文字コードについても初心者ですので、ヒントになるようなことでも教えていただければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • XML
  • VBAでMSXML2.DOMDocument を使用したい

    お世話になります。 下記ソースのようにVBAで「MSXML2.DOMDocument」を使用したいと 思うのですが実行すると 「Dim D As MSXML2.DOMDocument」の箇所で 「コンパイルエラー:ユーザ定義型は定義されていません」 とメッセージがでます。 どのようにすれば「MSXML2.DOMDocument」が使えるのでしょうか? 私は、完全な初心者でありました。何も設定せずに、VBAに下記の 文を入力しました。 解決策と、もし、VBAでDOMを使用する初心者サイトがありましたら 教えて頂ければとおもいます。 よろしくお願いします。 VBAソース-------------------------------------------- Dim D As MSXML2.DOMDocument Set D = New MSXML2.DOMDocument D.async = False If D.Load("C:\SAMPLE.XML") Then MsgBox "読み込み成功" Else MsgBox "読み込み失敗" End If

  • 属性の値に特殊文字が大量にあるとMSXMLで読み込めない

    MSXMLを使って、属性の値に特殊文字(「<」「>」「&」など)が 大量に使われているXMLを読みこもうとすると失敗します。 正常なXMLと認識されないようです。 「Load」を使ってファイルから読み込んだ場合もダメ。 「LoadXML」で文字列から読み込んだ場合もダメ。 以下のようなVBAコードで再現できます。 --------- Dim oDom As New MSXML2.DOMDocument With oDom.appendChild(oDom.createElement("root"))   With .Attributes.setNamedItem(oDom.createAttribute("attr"))     '.nodeValue = String(65533, "<") 'OK     .nodeValue = String(65534, "<") 'NG   End With End With oDom.loadXML oDom.XML '←正しく読み込めない --------- MSXML4でもMSXML6でも同様でした。 これはバグ、それとも仕様なのでしょうか。 探してもそれらしい資料が見つかりません。 どなたかわかる方、教えてください。 補足ですが、 実は同様のXMLファイルをIE6に読ませようとした場合にも、エラー表示されます。 エラーメッセージは「エラーを特定できません」。 FireFoxだとOKのようです。

    • 締切済み
    • XML