VB.NETでSystem.Xmlを参照設定して以下のXMLファイル(test.xml)のsub4_9のtestの個数を得たいのですが
domNode = domDoc.SelectSingleNode("top/sub4_9/test")
Console.WriteLine("Count of top/sub4_9/test = " & domNode.?????)
というようにしましたが?????の部分にLengthやCountがありません。
また、
rootElement = domDoc.DocumentElement
domNodeList = rootElement.GetElementsByTagName("sub4_9/test")
Console.WriteLine("Count of top/sub4_9/test = " & domNodeList.Count)
というようにもしてみましたが個数は誤った0が返されます。
どのように記述すればsub4_9のtestの個数を得ることができるでしょうか。
----test.xml-------------
<top>
<sub1_1>
<test>123</test>
<test>451</test>
:
</sub1_1>
:
<sub4_9>
<test>432</test>
<test>123</test>
<test>745</test>
:
</sub4_9>
:
<sub9_5>
<test>222</test>
:
</sub9_5>
</top>
--VB.NET------------------------
Imports System.Xml
Imports System.IO
Module Module1
Sub Main()
Dim domDoc As New XmlDocument
Dim domNode As XmlNode
Dim domNodeList As XmlNodeList
Dim rootElement As XmlElement
domDoc.Load("test.xml")
rootElement = domDoc.DocumentElement
domNode = domDoc.SelectSingleNode("top/sub4_9/test")
Console.WriteLine("Count of top/sub4_9/test = " & domNode.?????)
domNodeList = rootElement.GetElementsByTagName("sub4_9/test")
Console.WriteLine("Count of top/sub4_9/test = " & domNodeList.Count)
End Sub
End Module
-----------------------------------
よろしくお願いします
(WindpwsXP,VisualStudio2010)
No.1ベストアンサー
- 回答日時:
そりゃ,Select「Single」Nodeメソッドを呼び出したのですから,ひとつしか返ってきませんよ。
また,GetElementsByTagNameは要素名を引数にとるのであってXPathを引数にとらないのですから,/が入っていれば当然0個が返ります。
使うべきは,SelectNodesメソッドかと思います。
これは,XPathで指定したノードのリスト (XmlNodeList) を返します。
こちらには,Countプロパティがちゃんとあります。
Yune-Kichiさん
ありがとうございます。
SelectSingleNode()をSelectNodes()に替えてみたらできました。
domNodeList = domDoc.SelectNodes("top/sub4_9/test")
Console.WriteLine("Count of top/sub4_9/test = " & domNodeList.Count)
もし、よろしければGetElementsByTagName()についても教えて欲しいのですが
rootElement.GetElementsByTagName()というように、ルートから検索する例はいろいろあったのですが、ルートの1つ下のsub4_9という要素から検索させることはできるのでしょうか。
よろしくお願いします。
No.2
- 回答日時:
XPath /top/*/test をSelectNodesせずに得たい,ということでしょうか。
XmlElementからXmlElementのコレクションを簡単に得られないので,SelectNodesするのが一番簡単なのですが……。
一応,
rootElement.Children.OfType<XmlElement>().SelectMany(e => e.GetElementsByTagName("test").Cast<XmlElement>())
でIEnumerable<XmlElement>が得られます。
XmlNodeにはGetElementsByTagNameがないため,/top/*の各要素に対してGetElementsByTagNameを呼び出す,という形になっています。
# ここまでLINQ使うならXDocument系使って .Root.Elements().Elements("test") としたいところ。
< >やe=>などがあって難しいそうなので
基本的にはSelectNodes()を使って、
GetElementsByTagName()はルートからの検索のみに使うようにします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- その他(学校・勉強) Japanese schools tests 1 2022/08/19 14:41
- 中学校受験 Japanese schools 1 2022/08/22 15:53
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
あるノードリストに、特定の名前のノードが存在するかどうか調べたい
XML
-
VBA でxmlの全要素・属性の読み込み
Visual Basic(VBA)
-
TextBoxでEnterキーを押すと、にあるButtonを押したのと同じ効果を出す方法
Visual Basic(VBA)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPの名前空間インポートについて
-
どういうプログラムを関数化を...
-
DLL内でnewしたインスタンスを...
-
vb作成したらでbeep音が鳴りま...
-
AUTO_INCREMENTの動作について
-
python の import エラー Modul...
-
VB.NETからVBAマクロ(引数)を呼...
-
エラーの理由が分りません。Pri...
-
VBA コレクションに2次元配列...
-
PHP の system コマンド
-
classの再定義エラーについて
-
VB.NETSystem.Xml 要素数を得る...
-
配列の操作時にLNK2001外部シン...
-
VB6のコンボボックスのテキスト...
-
変数によるクラスの呼び出しが...
-
PHPで文字列内に指定した文字が...
-
Dosブロンプトでtabを出力したい
-
バッチファイルでpingの結果を...
-
開始と終了を指定して、その間...
-
「取得先」という表現について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
エラーの理由が分りません。Pri...
-
VB.NETからVBAマクロ(引数)を呼...
-
classの再定義エラーについて
-
可変変数にアロー演算子を使いたい
-
ASPのResponse.WriteをPHPでは...
-
PHPの名前空間インポートについて
-
protectedなのにアクセスできな...
-
条件式 ! char[0] とは
-
PHPの変数値をリンクさせたい
-
PHP、ヒアドキュメント内でのIF...
-
fwriteで改行出来ない
-
vb作成したらでbeep音が鳴りま...
-
Smarty変数の値をJavascript変...
-
UNIX CP "で上書きしません"
-
変数に格納できる桁数に制限は...
-
正規表現 ファイル名の取得
-
PHPで連番を繰り返す
-
Type.GetMethodで困っています
-
PHPでの画像の形式の変換
おすすめ情報