XMLでのAttributeを持ったNodeの追加方法

このQ&Aのポイント
  • VB6のcreateNodeを使用してXMLファイルにAttributeを持ったNodeを追加する方法を教えてください
  • シンプルなXMLファイルを作成する方法は分かりますが、Attributeを持ったNodeを作成する方法がわかりません。具体的なXMLファイルの例を示していただけると助かります。
  • Attributeを持ったNodeを追加するためには、createNodeメソッドとsetAttributeメソッドを使用します。具体的なコード例を示しながら説明していただけると幸いです。
回答を見る
  • ベストアンサー

XMLでのAttributeを持ったNodeの追加方法

VB6にてcreateNodeを使ってXMLを作成しようとしています。 シンプルなXMLは作成できたのですがAttributeを持ったNodeの追加方法が分かりません。 下記のようなXMLファイルを作成しようとしています。 <?xml version="1.0" encoding="utf-8"?> <configuration> <userSettings> <setting name="Color_Unknown_On" serializeAs="String"> <value>True</value> </setting> </userSettings> </configuration> ご教授お願いいたします。

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

  • ベストアンサー
回答No.1

'VBAでのみテスト '参照設定でMicrosoft XML,v6.0を追加してある。 Option Explicit Sub createXML() Dim document As MSXML2.DOMDocument60 Dim configuration As MSXML2.IXMLDOMElement Dim userSettings As MSXML2.IXMLDOMElement Dim setting As MSXML2.IXMLDOMElement Dim Value As MSXML2.IXMLDOMElement Dim nsURI As String 'ASP.NET等のconfiguration要素は 'http://schemas.microsoft.com/.NetConfiguration/v2.0 'だが,質問文に書かれていないので以下の記述とは違うのだろう 'nsURI = "http://schemas.microsoft.com/.NetConfiguration/v2.0" 'ちなみにcreateElementNSメソッドは存在しないため,名前空間に属する要素・属性等はcreateNodeで生成しないとダメっぽい。 '空白文字類の個数等は質問文と一致させない。 nsURI = "" Set document = New MSXML2.DOMDocument60 Set configuration = document.createNode(MSXML2.NODE_ELEMENT, "Configuration", nsURI) Set userSettings = document.createNode(MSXML2.NODE_ELEMENT, "userSettings", nsURI) Set setting = document.createNode(MSXML2.NODE_ELEMENT, "setting", nsURI) '括弧をつけてはダメらしい。 setting.setAttribute "name", "Color_Unknown_On" setting.setAttribute "serializeAs", "String" Set Value = document.createNode(MSXML2.NODE_ELEMENT, "value", nsURI) Value.Text = "True" setting.appendChild Value userSettings.appendChild setting configuration.appendChild userSettings document.appendChild configuration document.Save "hoge.xml" 'この辺,各変数にNothing入れる必要あるかもしれないけど 'よくわからんので放置 End Sub

men_tan
質問者

補足

himajin100000さん ありがとうございます。 早速、教えていただいたコードで試してみました。 XMLファイルを作ることが出来ました。 ただ、作成されたXMLファイルを見ると改行がなく、すべて1行に出力されていました。 各Nodeで改行とタブ(インテント)を入れることは可能でしょうか? <Configuration><userSettings><setting name="Color_Unknown_On" serializeAs="String"><value>True</value></setting></userSettings></Configuration>   ↓ <Configuration>   <userSettings>     <setting name="Color_Unknown_On" serializeAs="String">       <value>True</value>     </setting>   </userSettings> </Configuration>

その他の回答 (1)

回答No.2

いやあ、参った参った。 そのままでは,だめっぽいっすね http://msdn.microsoft.com/en-us/library/ms753769(VS.85).aspx >Example If your DOMDocument contains unformatted XML, you might want to format it before saving. There is no flag in DOMDocument that can be set to indent your XML. In this situation, you might want to use the SAX writer to produce the resulting XML. The following Microsoft Visual Basic example demonstrates how to perform DOM-to-SAX conversion to use the SAX writer's indent property. It then saves the output from the writer into a file in the application folder. DOM単体じゃできないから,下のコードでSAXに移行して,そっちでindentプロパティ書け、とかかかれてます。 #最初はXSLTのoutputプロパティ使うかなーとか考えてたが, #サンプルコードがなくて自力で書くのが面倒くさそうなので却下

men_tan
質問者

お礼

himajin100000さま ありがとうございました。 私もDOMのIndentを設定するPropertyを探したのですが見つかりませんでした。DOMには無いんですね。。。 XMLはTextファイルなのでhimajin100000さまに教えていただいた方法で出力して、後はFSOで修正します。 himajin100000さまのおかげで解決できそうです。 ありがとうございました。

関連するQ&A

  • vb6 XMLファイル出力について<S></S>

    vb6にてXMLファイル出力のプログラムを作成しています。 XMLファイル内容 <?xml version="1.0" encoding="UTF-8"?> <root> <key>AA</key> <string>aa</string> <key>BB</key> <string/> </root> 上記の<string/>の部分を<string></string>のように出力したいのですが、 どうしても上手くいきません。 下記にソースを記載します。 何か少しでもお分かりになる情報がありましたらご教授願いします。 よろしくお願いします。 Dim xmlDoc As MSXML2.DOMDocument 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(50) As IXMLDOMNode '要素 Dim attr As MSXML2.IXMLDOMAttribute '属性 'XMLドキュメントを作成 Set xmlDoc = New MSXML2.DOMDocument 'XML宣言を追加 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) '<root>要素を追加 Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "")) '<key>要素を追加 Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(2).Text = "AA" '<string>要素を追加 Set node(3) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(3).Text = "aa" '<key>要素を追加 Set node(4) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(4).Text = "BB" '<string>要素を追加 Set node(5) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(5).Text = "" 'XMLドキュメントの出力 Dim strXMLFile As String strXMLFile = Format(Date, "yyyymmdd") & Format(Time, "hhmmss") xmlDoc.save ("C:TEST\TEST.xml") '終了処理 If Not xmlDoc Is Nothing Then Set xmlDoc = Nothing If Not xmlPI Is Nothing Then Set xmlPI = Nothing

  • VBでXMLファイルを作ると xmlns= が・・・

    VB6でXMLを作成しています。 Dim xmlDoc As New MSXML2.DOMDocument40 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(7) As IXMLDOMNode '要素 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version= ""1.0"" encoding= ""Shift_JIS"" standalone= ""no""")) Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "kml", "")) Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "kmlHeader", "")) Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "kml_DTD", " kml_Version= 2.8"" kml_FileName=""../DTD/HYB01.dtd")) 以下省略 すると <kml_DTD xmlns="kml_Version= 2.8" kml_FileName="../DTD/HYB01.dtd" /> "xmlns=" はどうすれば消えますか?お願いします。

  • XMLの相対パスの書き方

    <?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <info> <element> <item>Pwd</item> <value>00000000000000</value> </element> <element> <item>Name</item> <value>MyPC</value> </element> </info> </root> こういうXMLファイルの記述があり、itemがNameであるvalueを取りたいといった場合、どういうパスを記述すればよいでしょうか? VBで動くようにしたいです。 よろしくお願いします。

    • ベストアンサー
    • XML
  • 既存のXMLを別のXMLの要素として追加する方法

    JavaでDOMを使用して、既に作成してあるXMLを別のXMLの要素として追加しようと思っているのですが、なかなか上手くいかないので投稿いたしました。 具体的に以下のような既存のXMLファイルがあると仮定して、 <?xml version="1.0" encoding="UTF-8"?> <a> <b>0</b> <c>1</c> <d>2</d> </a> 上記のXMLの親ノード(逆に言えば、このXMLの子ノードとして上記XMLを追加)にあたるXMLは以下のようになっています。 <?xml version="1.0" encoding="UTF-8"?> <A> </A> そして<A>と</A>の間に既存のXMLを追加して、 <?xml version="1.0" encoding="UTF-8"?> <A> <a> <b>0</b> <c>1</c> <d>2</d> </a> </A> のようにしたいと考えています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 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") ここから先がよくわからない %>

  • XMLでこんなの作りたい。

    [ 環境 ] OS:WindowsXP Pro PHP:5.3.1 Apache:2.2.14 DBServer:SQLServer2005 EXPRESS [ 質問 ] DB側データ row,level,level_name 0,level1,root 1,level2,admin という様なデータをXMLにて以下の様な表示にしたい。 <?xml version="1.0" encoding="UTF-8" ?> <result> <row row="0"> <level>level1</level> <level_name>root</level_name> </row> <row row="1"> <level>level2</level> <level_name>admin</level_name> </row> </result> この場合、以下のソースをどの様に変更したら良いか アドバイスを頂けたらと思います。 <?php // SQLServerとの接続 require("connect-sqlserver.php"); // XML 生成 $dom = new DOMDocument("1.0"); $node = $dom->createElement("result"); $parnode = $dom->appendChild($node); // MSSQLSERVR への接続セット $db = mssql_connect($server, $userid, $passwd); mssql_select_db($dbName, $db); // [SYSW_LEVEL]テーブルからフィールド情報取得 $query = "SELECT * FROM SYSW_LEVEL"; $res = mssql_query($query, $db); header("Content-type: text/xml"); // XMLへフィールドの値を渡す while ($row = mssql_fetch_assoc($res)) { $node = $dom->createElement("row"); $newnode = $parnode->appendChild($node); $newnode->setAttribute("level", $row['LVL_LEVEL']); $newnode->setAttribute("level_name", mb_convert_encoding($row['LVL_LEVELNAME'],'UTF-8','CP932')); } $dom->encoding="UTF-8"; echo $dom->saveXML(); ?> 以上、よろしくお願い致します。

    • 締切済み
    • PHP
  • VBでXMLファイルを作成していますが、エラーになります

    すみません、教えてください。 VB6でXMLファイルを作成しています。コメントを入れようとすると"!--"の文字でこけます。どうしたらいいのでしょうか?コーディングは以下のようにしてます。 Dim xmlDoc As New MSXML2.DOMDocument40 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(3) As IXMLDOMNode '要素 garFNRpt = sFPass + "Sousinfile\DATA\" + sFilemei + ".xml" 'XML宣言を追加します。 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, """!--""kml基本情報", "")) よろしくお願いします

  • XMLの要素の内容の中に要素

    VisualBasic6.0にて、XMLを作成するプログラムを作っています。 XMLの作成、編集はMSXMLを使用しており、編集保存はできたのですが、下記のような要素の出力の仕方がわかりません。 <Node1>  あいうえお  <Node1-1>abcde</Node1-1>  かきくけこ </Node1> このように要素の文字列の途中に子要素を作成したいです。 「Node1」要素に、子要素「Node1-1」を追加するサンプルです。 Cドライブ直下に以下の内容のXMLファイル「test.xml」を作成 <?xml version="1.0" encoding="shift_jis"?> <Node1> </Node1> VB6にて、参照設定に「Microsoft XML V6.0」を追加し以下のコードを作成。 Private Sub Command1_Click() Dim xDoc As MSXML2.DOMDocument Set xDoc = New MSXML2.DOMDocument Dim node As IXMLDOMNodeList Dim Addnode As IXMLDOMNode Dim obj As IXMLDOMNode If xDoc.Load("C:\test.xml") Then Set node = xDoc.documentElement.selectNodes("/Node1") For Each obj In node Set Addnode = obj.appendChild(xDoc.createNode(NODE_ELEMENT, "Node1-1", "")) Addnode.Text = "abcde" Next xDoc.save ("C:\test.xml") End If Set xDoc = Nothing End Sub

  • xmlのデータを条件を絞って表示する

    PHPでxmlのデータを条件を絞って表示したいと思っています。 xmlデータをPHPで作成し、結果表示するというのはサンプルを参考に作成できたのですが、条件の絞り方がわからず困っています。 <?php $xmlstr = <<<XML <?xml version="1.0" encoding="UTF-8" standalone='yes'?> <item> <name>牛肉</name> <value>ヒレ</value> <price>500</price> </item> <item> <name>豚肉</name> <value>ヒレ</value> <price>400</price> </item> <item> <name>豚肉</name> <value>もも</value> <price>300</price> </item> <item> <name>鶏肉</name> <value>もも</value> <price>200</price> </item> ・・・・・・ ・・・ XML; ?> というデータを 例えば<value>が(もも)に当てはまるものだけや、 <price>が400以下のものなど、条件を絞って表示したいと思っています。できれば、プルダウンのセレクトメニューを使用して条件をしぼりたいと思っています。 どうすればいいかまったくわかりません。 サンプルを見ながら手を加えるぐらいしかできないレベルです。 よろしければ教えてください。 また、作成したプログラムは携帯でも表示できますでしょうか? セレクトメニューが携帯では表示できないことはしっていますので、チェックボタンなどを使って表示出来ればいいなと思っています。

    • 締切済み
    • PHP
  • XMLの実体参照とXSLT

    次のようなXMLファイルをXSLTで処理したいのですが、&baseの部分がうまく表示できません。 どのようにしたら表示できるでしょうか? ■a.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="a.xsl"?> <!DOCTYPE test [ <!ELEMENT name (#PCDATA)> <!ENTITY base SYSTEM "base.xml"> ]> <test> <name>abc</name> &base; </test> ■base.xml <?xml version="1.0" encoding="UTF-8"?> <base>base</base> ■a.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8" /> <xsl:template match="/"> <xsl:apply-templates select="test" /> <xsl:apply-templates select="base" /> </xsl:template> <xsl:template match="test"> name:<xsl:value-of select="name" /> </xsl:template> <xsl:template match="base"> base:<xsl:value-of select="base" /> </xsl:template> </xsl:stylesheet> □結果 name:abc ※base.xmlの内容を表示できない

    • ベストアンサー
    • XML

専門家に質問してみよう