DOBON.NET DOBON.NETプログラミング掲示板過去ログ

XMLの読込について

環境/言語:[OS : Windows XP Professional / 言語 : Visual Basic .NET / .NET Framework : 2.0]
分類:[.NET]

【解決したい問題】

こんにちは。いつもお世話になっています。

現在VB.NETでXMLを読み込んでフォームに表示させるというプログラムを作成しております。その中でinnertextの使い方でよく分からない点があり教えていただけたらと思い投稿しました。

XMLの構造としては
(半角スラッシュでは投稿できなかったため全角/で書いています。)
<?xml version="1.0" encoding="utf-8"?>
</a>
</b bbb>
aaa
<a/>



<?xml version="1.0" encoding="utf-8"?>
<!-- コメント -->
</a>
<!-- コメント -->
</b bbb>
aaa
<a/>



<?xml version="1.0" encoding="utf-8"?>
<!-- コメント -->
</a>
aaa
<!-- コメント -->
</b bbb>
<a/>

の3種類ありaaaだけを取得して表示させたいのですが、aをinnertextで取得すると必要の無いbbbの部分がのあるaaabbbという文字列が取得してしまいます。またaのnode.childnodes(0).innertextなどの決めうちをする場合、上記の例では3種類を判別すれば可能ではあると思いますが、複雑化した場合に対応できなくなると考えています。複数の子を持つ親の要素の値だけを取得するにはどのようにしたらよいのでしょうか?

Dim xmlDoc As New System.Xml.XmlDocument
'XMLファイルを読み込む
xmlDoc.Load("C:\Work\Test.xml")
'ルート要素を取得する
Dim rootElement As System.Xml.XmlElement = xmlDoc.DocumentElement
'aタグのNodeListを取得する
Dim node As System.Xml.XmlNodeList = rootElement.GetElementsByTagName("a")

'指定したタグが存在するか?
If node.Count Then
'指定したタグが存在したのでInnerTextプロパティで値を取得する
Console.WriteLine(node.Item(0).InnerText)
End If

aaabbbが表示されました。

Dim xmlDoc As New System.Xml.XmlDocument
'XMLファイルを読み込む
xmlDoc.Load("C:\Work\Test.xml")
'ルート要素を取得する
Dim rootElement As System.Xml.XmlElement = xmlDoc.DocumentElement
'aタグのNodeListを取得する
Dim node As System.Xml.XmlNodeList = rootElement.GetElementsByTagName("a")

'指定したタグが存在するか?
If node.Item(0).HasChildNodes Then
'指定したタグが存在したのでInnerTextプロパティで値を取得する
Console.WriteLine(node.Item(0).ChildNodes(0).InnerText)
End If

このように決め打ちした場合
コメントが表示されたり、aaaだけが表示されたり、bbbが表示されました。

【解決するために何をしたか】

Googleなどで検索しましたがこういう構造のXMLの物は発見できませんでした。
ヘルプなどを参照して見ましたが、いまいちピンときませんでした。

お忙しいところ申し訳ありません。

よろしくお願いいたします。
// なんか XML 内の / のつき方がおかしいですが。

a 要素を指す XmlNode の、子ノード ChildNodes の中から、NodeType が Text のものだけを取り出すとか。
混合内容の場合の空白文字の取り扱いに御注意を。
  • 題名: Re[2]: XMLの読込について
  • 著者: 新人PG
  • 日時: 2008/09/02 11:20:07
  • ID: 22893
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No22891に返信(Hongliangさんの記事)
> // なんか XML 内の / のつき方がおかしいですが。
>
> a 要素を指す XmlNode の、子ノード ChildNodes の中から、NodeType が Text のものだけを取り出すとか。
> 混合内容の場合の空白文字の取り扱いに御注意を。

返信ありがとうございます。

理解できました。

ChildNodesの数だけForで回してNodeTypeがTextのものだけを取得しようと思います。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板