dポイントプレゼントキャンペーン実施中!

VB6でXML作成のプログラムを作ったのですが、読み取り専用のノードを編集しようとしましたのメッセージボックスが表示されます。 どなたかどこが悪いのか、ご教授願います。 ソースコードは以下の通りです。

Dim xmlDoc As MSXML.DOMDocument 'XMLドキュメント
Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言
Dim node(3) As IXMLDOMNode '要素
Dim attr As MSXML.IXMLDOMAttribute '属性
Dim newText

Set xmlDoc = New MSXML.DOMDocument 'XMLドキュメントを作成します。

'XML宣言を追加します。
Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"""))

'<ClinicalDocument>要素を追加します。
Set node(1) = xmlDoc.createElement("ClinicalDocument")
Call xmlDoc.appendChild(node(1))

'xmlns:xsi属性を追加します。
Set attr = xmlDoc.createAttribute("xmlns:xsi")
Call node(1).Attributes.setNamedItem(attr)
attr.nodeValue = "http://www.w3.org/2001/XMLSchema-instance" ''ここでエラーが出ます

'<Customer>要素を追加します。
Set node(2) = xmlDoc.createElement("Customer")
Call node(1).appendChild(node(2))
Call node(2).appendChild(xmlDoc.createTextNode(vbNewLine))

'id属性を追加します。
Set attr = xmlDoc.createAttribute("id")
Call node(2).Attributes.setNamedItem(attr)
attr.nodeValue = "1"

'<Name>要素を追加します。
Set node(3) = xmlDoc.createElement("Name")
Call node(2).appendChild(node(3))
Set newText = xmlDoc.createTextNode("Jhon")
Call node(3).appendChild(newText)

'XMLドキュメントの出力
xmlDoc.save (App.Path & "\customer.xml")

A 回答 (1件)

んー、理由は知らんけど,


どうやら
setNamedItem
実行後にはそのNodeのNodeValueは変更できないみたいなので
変更してからsetNamedItemを実行することになりそう。

で、追加後に変更したくなったら
removeNamedItemすれば
変更できるようになるようなので
もう一回setNamedItem
でセットするような感じになりそうだ。
=======================================
ところで…
Dim node(3) As IXMLDOMNode '要素
であって
Dim node(3) As MSXML.IXMLDOMElement
じゃないのは何か理由があるのかなあ…
#ま、IXMLDOMElementにあるsetAttribute使っても
結局変更する時にはremoveAttributeしないといけないみたいなんですけどね
=========================
##それにしてもNamespaceResolverみたいのがなくてxmlns:hoge属性で代用したり,XML宣言が書けないからって,処理命令で代用しなきゃいけないってのはかなり辛いね。

この回答への補足

さっそっくのご回答ありがとう御座います。
はじめに言い忘れたのですが、わたくしXMLのことに関しては全くのど素人です。
Set attr = xmlDoc.createAttribute("xmlns:xsi")の"xmlns:xsi"の部分を"xxxxxx"などに置き換えるとエラーがでずに作成されました。
removeAttributeを使用してのコーディングのやり方がわからないでよかったらその辺、ご教授願えませんでしょうか?

補足日時:2008/08/05 09:09
    • good
    • 0
この回答へのお礼

さっそっくのご回答ありがとう御座います。
はじめに言い忘れたのですが、わたくしXMLのことに関しては全くのど素人です。
Set attr = xmlDoc.createAttribute("xmlns:xsi")の"xmlns:xsi"の部分を"xxxxxx"などに置き換えるとエラーがでずに作成されました。
removeAttributeを使用してのコーディングのやり方がわからないでよかったらその辺、ご教授願えませんでしょうか?

お礼日時:2008/08/05 20:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!