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

わんくま同盟

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

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


(過去ログ 74 を表示中)
■43516 / )  Re[3]: vbでxml出力
□投稿者/ 魔界の仮面弁士 (1383回)-(2009/11/11(Wed) 20:46:06)
2009/11/11(Wed) 22:41:17 編集(投稿者)

No43513 (まきお さん) に返信
>>http://questionbox.jp.msn.com/qa4226645.html
> 変更するということがうまくわからず断念したので

元のコードは、名前空間を指定するために
 Set xmlAttr = xmlNode.Attributes.setNamedItem(xmlDoc.createAttribute("xmlns"))
 xmlAttr.nodeValue = "http://www.example.com/"
としてエラーとなっていますが、これは、属性ノードを要素ノードに追加してから、
その後で属性値を変更しようとしているためです。

この場合正しくは、
 Set xmlAttr = xmlDoc.createAttribute("xmlns")
 xmlAttr.nodeValue = "http://www.example.com/"
 xmlNode.Attributes.setNamedItem xmlAttr
のように、まず、属性ノードに属性値をセットし終わってから、
要素ノードに追加するようにします。


> <root xmlns="http://www.・・・"
> xmlns:xsi="http://www.・・・"
> xsi:schemaLocation="http://www.・・・">
> としたいのですが。

たとえば、以下のように記述すれば OK です。
  Set xmlNode = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "http://www.example.com/"))
  Set xmlAttr = xmlDoc.createNode(NODE_ATTRIBUTE, "xsi:schemaLocation", "http://www.example.net/")
  xmlNode.Attributes.setNamedItem(xmlAttr).nodeValue = "http://www.yahoo.com/"


やろうと思えば、上記を一行で書くこともできますが…流石にこれでは読みにくいですね。
  xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "http://www.example.com/")).Attributes.setNamedItem(xmlDoc.createNode(NODE_ATTRIBUTE, "xsi:schemaLocation", "http://www.example.net/")).nodeValue = "http://www.yahoo.com/"


ところで、今回の質問は
>>> 分類:[.NET 全般]
として投稿されていましたが、実際には .NET に関する話題ではありませんよね。

Excel VBA に関する内容であれば、[Microsoft Office 全般] か [VB6 以前] あたりが
適当かと思います。次回投稿時には、分類の選択もお忘れなく。
返信 編集キー/


管理者用

- Child Tree -