- PR -

xml書き込みにて

1
投稿者投稿内容
どら
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 63
投稿日時: 2006-07-26 11:41
vs2005,vb

いつも、拝見しています。

1つ、ご教授願いたい点があります。

xmlに要素を追加し、その要素に子要素を追加したいのです。
Dim xDoc As New XmlDocument
Dim xmlRoot As System.Xml.XmlElement = xDoc.DocumentElement
Dim xmlElem As System.Xml.XmlElement

xmlElem = xDoc.CreateElement("printer")
xmlElem.SetAttribute("name", 名前)

xmlElem.IsEmpty = False

xmlRoot.AppendChild(xmlElem)

Dim ageElement As XmlElement = xDoc.CreateElement("PName")

xmlRoot.AppendChild(ageElement)
ageElement.InnerText = "17"

と、コーディングしているのですが、xml書き込み結果は

<printer name="名前">
</printer>
<PName>17</PName>

と表示されてしまします。

<printer name="名前">
   <PName>17</PName>
</printer>
上記のように間に入れたいのですが、各AppendChildの場所とかが違うのでしょうか?
いろいろ、変えてみたのですが、上にいったり、下にいったりで、中には入ってくれません。

初歩的な質問かもしれませんが、ご教授お願いいたします。
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-07-26 11:51
引用:

どらさんの書き込み (2006-07-26 11:41) より:
vs2005,vb

いつも、拝見しています。

1つ、ご教授願いたい点があります。

xmlに要素を追加し、その要素に子要素を追加したいのです。
Dim xDoc As New XmlDocument
Dim xmlRoot As System.Xml.XmlElement = xDoc.DocumentElement
Dim xmlElem As System.Xml.XmlElement

xmlElem = xDoc.CreateElement("printer")
xmlElem.SetAttribute("name", 名前)

xmlElem.IsEmpty = False

xmlRoot.AppendChild(xmlElem)

Dim ageElement As XmlElement = xDoc.CreateElement("PName")

xmlRoot.AppendChild(ageElement)
ageElement.InnerText = "17"

と、コーディングしているのですが、xml書き込み結果は

<printer name="名前">
</printer>
<PName>17</PName>

と表示されてしまします。

<printer name="名前">
   <PName>17</PName>
</printer>
上記のように間に入れたいのですが、各AppendChildの場所とかが違うのでしょうか?
いろいろ、変えてみたのですが、上にいったり、下にいったりで、中には入ってくれません。

初歩的な質問かもしれませんが、ご教授お願いいたします。


2つともルートノードに追加しているからそうなります。
VBの書き方は知りませんがなんとなく

× xmlRoot.AppendChild(ageElement)
○ xmlElem.AppendChild(ageElement)

だと思いますけどどうでしょう。
_________________
己への戒め

「活動的な馬鹿より恐ろしいものはない」 by ゲーテ
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-07-26 11:55
こんにちは。

とりあえず、パッと見ですが。
ここをよーく見てみてください。
声に出して読んでみたりすると効果大。

xmlRoot.AppendChild(ageElement)

# と書いていたら想馬さんにズバリ答えを書かれていた罠 _| ̄|○
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
どら
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 63
投稿日時: 2006-07-26 11:55
想馬さん、返信ありがとうございます。

xmlElem.AppendChild(ageElement)

と変更したところ、

<printer name="名前">
<PName>17</PName>
</printer>
と、なりました。

xmlRootとxmlElemの違いだったのですね。単純ですが、結構なやんでしまいました。
もう一度、ヘルプ等で意味を見直します。

ありがとうございました。
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-07-26 13:08
AppendChild(言語によってはappendChild)はそのノードの子として追加するノードを引数で与えます。printerノードの子としてPNameノードを追加するのであれば、

printerノード.AppendChild( PNameノード )

とします。ようするに、

親になるノード.AppendChild( 子ノード )

です。
_________________
己への戒め

「活動的な馬鹿より恐ろしいものはない」 by ゲーテ
どら
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 63
投稿日時: 2006-07-28 18:05
想馬さん、返事おくれて、すいません。

自分のパターンですと xmlElemが親で、新しくCreateElementしたageElement(子)を渡してあげる感じですね。

イメージがつかめました。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)