こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2018-01-30 20:08:01

QNo.9423926

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

VBAでMSXMLを使用していますが、質問者様とは逆のニーズで悩まされました。当方が到達した結論は、
「MSXMLは、<S></S>を出力するか、<S/>を出力するかは気紛れなので、XML生成後にテキスト処理して、統一するしか無い」
というものです。
仕方が無いので、正規表現を用いて<S></S>を<S/>に整形しています。
ところで、空要素に対して、
<S attribute1="a" attribute2="b"></S attribute1="a" attribute2="b">
等という、IEがエラーと見なして?表示しないようなXMLまで吐き出してくれる事があります。この対策として、空要素の代わりに、絶対他に使わないであろう文字・文字列を入れておいて、最後にテキスト処理で空文字と置換(つまり削除)する方法を取っています。これにより、<S attribute1="a" attribute2="b"></S>を出力する事ができます。
この手法を応用すると、当然<S/>が出来る事は無く、<S></S>になります。ご参考まで。

投稿日時 - 2018-02-10 22:46:24

もしくは

node(5).Text = "kkkk"

と出力してみる。

投稿日時 - 2018-01-30 22:19:05

ANo.2

>上記の<string/>の部分を<string></string>のように出力したい
すまん、逆だったorz
<string></string>となってしまうのを<string/>と出力したいのだと思っていた。MSXMLv3.0で出力した手元のファイルをメモ帳で開くと<string></string>となっているけどなぁ?

投稿日時 - 2018-01-30 22:08:29

ANo.1

http://www.jenitennison.com/2007/04/25/msxml-serialisation-of-empty-elements.html

>node(5).Text = ""
を削除?

投稿日時 - 2018-01-30 22:01:33

あなたにオススメの質問