【VB6のXML書込みについて質問】

以下のようなコーディングでXMLに対する書込み処理を行ったのですが、
結果が、期待しているものと異なっていました。
期待する結果の表示にするためにはどのようにすればいいのか
教えていただきたく宜しくお願いします。


[作成したコード]

Dim setting1 As MSXML2.IXMLDOMElement
Dim setting2 As MSXML2.IXMLDOMElement

Dim xmlDoc As MSXML2.DOMDocument
Dim currentNode As IXMLDOMNode

xmlDoc.Load("ファイルパス")

currentNode =xmlDoc.SelectSingleNode("アイテム追加先")
Set setting1 =xmlDoc.createNode(MSXML2.NODE_ELEMENT,"ITEM")'新規アイテム
Set setting2 =xmlDoc.createNode(MSXML2.NODE_ELEMENT,"ITEM")'新規アイテム
currentNode.appendChild setting1 '一回目
currentNode.appendChild setting2 '二回目

[実行結果]

<ITEM></ITEM><ITEM></ITEM>

[期待する内容]

<ITEM></ITEM>
<ITEM></ITEM>

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2011/01/12 11:10:06
  • 終了:2011/01/17 00:01:43

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4504ベストアンサー獲得回数18702011/01/12 16:13:46

ポイント250pt

「期待する内容」というのは、text プロパティで取得できる文字のことですか?

実行結果と、期待する内容と言うのが、XML としては 違うもの だということは、理解できますか?

Dim crlf As MSXML2.IXMLDOMText				'★ここ
    ...
currentNode =xmlDoc.SelectSingleNode("アイテム追加先")
Set setting1 =xmlDoc.createNode(MSXML2.NODE_ELEMENT,"ITEM")'新規アイテム
Set setting2 =xmlDoc.createNode(MSXML2.NODE_ELEMENT,"ITEM")'新規アイテム
Set crlf = xmlDoc.createTextNode(vbCrLf)	'★ここ
currentNode.appendChild setting1 '一回目
currentNode.appendChild crlf				'★ここ
currentNode.appendChild setting2 '二回目

多分、こんな感じでいけると思います。


http://msdn.microsoft.com/en-us/library/ms764643.aspx

id:harunoharuno

回答ありがとうございます。

”実行結果”と”期待する内容”の違いは、表現の違いで意味は同一と考えていました(--;)。

後で追記コメントします。

期待通りの実行結果を得ることができました。回答ありがとうございます。

しかし、残念ながらXMLとして違うものの・・・という示唆については良くわかりませんでした。

質問終了まで時間がないので終了します。

2011/01/16 23:59:42

その他の回答(2件)

id:ko8820 No.1

ko8820回答回数1221ベストアンサー獲得回数692011/01/12 11:45:17

ポイント25pt

Set setting1 =xmlDoc.createNode(MSXML2.NODE_ELEMENT,"ITEM")'新規アイテム

currentNode.appendChild setting1 '一回目

Set setting2 =xmlDoc.createNode(MSXML2.NODE_ELEMENT,"ITEM")'新規アイテム

currentNode.appendChild setting2 '二回目

このように書いた場合、どうなりますか?

http://q.hatena.ne.jp/answer

id:harunoharuno

回答ありがとうございます。

残念ながら現状の出力と変わりませんでした。

2011/01/12 13:54:06
id:a-kuma3 No.2

a-kuma3回答回数4504ベストアンサー獲得回数18702011/01/12 16:13:46ここでベストアンサー

ポイント250pt

「期待する内容」というのは、text プロパティで取得できる文字のことですか?

実行結果と、期待する内容と言うのが、XML としては 違うもの だということは、理解できますか?

Dim crlf As MSXML2.IXMLDOMText				'★ここ
    ...
currentNode =xmlDoc.SelectSingleNode("アイテム追加先")
Set setting1 =xmlDoc.createNode(MSXML2.NODE_ELEMENT,"ITEM")'新規アイテム
Set setting2 =xmlDoc.createNode(MSXML2.NODE_ELEMENT,"ITEM")'新規アイテム
Set crlf = xmlDoc.createTextNode(vbCrLf)	'★ここ
currentNode.appendChild setting1 '一回目
currentNode.appendChild crlf				'★ここ
currentNode.appendChild setting2 '二回目

多分、こんな感じでいけると思います。


http://msdn.microsoft.com/en-us/library/ms764643.aspx

id:harunoharuno

回答ありがとうございます。

”実行結果”と”期待する内容”の違いは、表現の違いで意味は同一と考えていました(--;)。

後で追記コメントします。

期待通りの実行結果を得ることができました。回答ありがとうございます。

しかし、残念ながらXMLとして違うものの・・・という示唆については良くわかりませんでした。

質問終了まで時間がないので終了します。

2011/01/16 23:59:42
id:khazad-Lefty No.3

khazad-Lefty回答回数181ベストアンサー獲得回数272011/01/13 13:52:05

ポイント25pt

えっと。私の知る限りでは無理です。

正確に言うと、MSXMLのDOMから出力されるXML文は改行などの整形が行われません。

(私の記憶の限りでは…MSXML3までならかなり調べたので…それ以降で対応した可能性もなくはないですが。)

.Net系のXMLクラスだと整形が行われるのですが…。

どうしてもというなら、出力されたXMLをテキスト処理するなり、SAXパーサーを通すなりして、

自力で成形するしかないかなと…。

ただ、SAXも、"msxml sax vb6"あたりで検索しても、「これ」というのが出てこないんですよね…。

http://msdn.microsoft.com/ja-jp/library/ms994347.aspx

id:harunoharuno

回答ありがとうございます。

二番目に回答したa-kuma3のほうほうで実装できました。

2011/01/17 00:00:33
  • id:a-kuma3
    <ITEM></ITEM><ITEM></ITEM>
    と、
    <ITEM></ITEM>あ<ITEM></ITEM>
    が、違うのは分かりますよね。
    後者は、ITEM と ITEM の Element の間に、value が "あ" の text-node があります。

    <ITEM></ITEM>
    <ITEM></ITEM>
    も、考え方は同じで、value が *改行だけ* の text-node がある、ということです。

    XML は、データの表現形式なので、質問にある二つは、データとして違うものになります。

    とはいえ、データが大きくなると見づらくなるので「整形したい」という要求は出てくるのですが、
    あくまでも、元データから別のデータを作るということになります。

    java の API (JAXP) だと、Transformer でできたりするんですが、msxml に該当する API はなさそう。
    xsl を書いて IXSLTemplate を使うのが、それに相当するんでしょうけど。
    http://msdn.microsoft.com/en-us/library/ms767644.aspx

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません