掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VBAでXMLの要素を追加するときの処理方法 (ID:101611)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> <タグ5 属性51="abc"/> '←[タグ5]の[属性51]が[1000]だったら追加処理 コメントの意図ならば、「'」よりも「<!-- -->」の方が良いかも。 本題とは無関係ですけれども。 > Set MyNode = DomXmlDocument.createNode(2, "属性61", "abcdef") 第3引数に属性値を指定しているようですが、そこにくるのは名前空間の指定ですよ。 また、「2」のようなマジックナンバーではなく、「NODE_ATTRIBUTE」などの定数を使うようにしましょう。 それと、肝心の「<タグ6>」の要素ノードを作るためのコードも抜け落ちているようです。 > Set namedNodeMap = DomXmlDocument.DocumentElement.ChildNodes.Item(4).Attributes これはエラーになりますね。 load 前の preserveWhiteSpace プロパティの値にもよりますが、 preserveWhiteSpace = False で読み込んでいたとしたら、 『DomXmlDocument.DocumentElement.ChildNodes』の .length は 1 ですよね。 タグ2ノードしか返さないはずなので、.Item(4) はエラーです。 preserveWhiteSpace = True であったとしても、.lengh は 3 です。 「タグ1 と タグ2 の間のテキストノード」と、「タグ2 の要素ノード」と 「タグ2 の終わりからタグ1 の間のテキストノード」だけであって、 『4』は存在しません。 > ■やりたいこと(処理後) 私が書くとしたら、こうかな…。 Dim DomXmlDocument As MSXML2.DOMDocument Set DomXmlDocument = New MSXML2.DOMDocument DomXmlDocument.async = False DomXmlDocument.preserveWhiteSpace = True DomXmlDocument.Load "test.xml" DomXmlDocument.setProperty "SelectionLanguage", "XPath" Dim Node As IXMLDOMNode For Each Node In DomXmlDocument.selectNodes("//*[タグ5/@属性51='1000']") Node.insertBefore(DomXmlDocument.createElement("タグ6"), Nothing).Attributes.setNamedItem(DomXmlDocument.createAttribute("属性61")).nodeValue = "abcdef" Next DomXmlDocument.save "test_after.xml"
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.