Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
XMLの値
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30353#CommentId83356
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2018/9/1 00:39:34
「どういう結果を得たいのか」は説明されているのですが、
肝心の「どの部分の情報を取得したいのか」の説明が不足しているようで…。
> ●ID要素は属性のみなので値としてはString.Emptyが欲しい
ID 要素は空要素では無いですよね。
ここでいう『値』とは何を指していますか?
とりあえず、ID 要素の直下にある Text ノードのみを得たいという意味で良いでしょうか?
もしそれで構わないなら、直下の XText を繋げてみるのは如何でしょう。たとえば
Dim
value =
String
.
Join
(
""
, element1.Nodes().OfType(
Of
XText)().
Select
(
Function
(n) n.Value))
とすることができます。
(このままだと冗長的なので、実際に使う時は拡張メソッドにしておいた方が良いかも)
ただし、元の空白を保持させておいた場合には、
改行や空白を含んだ文字列になりえることにご注意ください。
> Dim element1 As XElement = Doc.<Root>.<ID>.First
> Console.WriteLine(String.Format("タグ名:{0} 値:{1}", element1.Name, element1.Value))
ということで、空白の扱いについて。
───────
今回は埋め込みの XDocument リテラルで記述しておられるようなので、
一部の改行やインデント空白が破棄され、element1 は下記の内容になります。
『<ID id="1">
<Name>山田太郎
<Age>40</Age></Name>』
element1.Attributes().Count() は『1』を返します。
element1.Attributes()(0) は Attribute ノード『id="1"』を返します。
element1.Nodes().Count() は 『1』 を返します。
element1.Nodes()(0) は Element ノードです。これは element2 変数が示す XElement にあたります。
element2 には、下記の Element ノードが入ります。
『<Name>山田太郎
<Age>40</Age></Name>』
そして上記の element2 は、直下に 2 つの子ノードを持っています。
Text ノード『山田太郎{改行}␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣』
Element ノード『<Age>40<Age>』
が得られるという想定です。
この場合、直下の XTextのみを拾って繋げると、
element1 からは『』すなわち String.Empty
element2 からは『山田太郎{改行}␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣』
が得られるという想定です。
───────
もしも XDocument が LoadOptions.PreserveWhitespace 指定で読み込まれていた場合、
上記の element1 には下記の Element ノードが入ることになります。
『<ID id="1">
<Name>山田太郎
<Age>40</Age>
</Name>
</ID>』
element1.Attributes().Count() は『1』を返します。
element1.Attributes()(0) は Attribute ノード『id="1"』を返します。
element1.Nodes().Count() は 『3』 を返します。
element1.Nodes()(0) は Text ノード『{改行}␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣』を指します。
element1.Nodes()(1) は Element ノードです。これは element2 変数が示す XElement にあたります。
element1.Nodes()(2) は Text ノード『{改行}␣␣␣␣␣␣␣␣␣␣␣』を指します。
element2 には、下記の Element ノードが入ります。
『<Name>山田太郎
<Age>40</Age>
</Name>』
そして上記の element2 は、直下に 3 つの子ノードを持っています。
Text ノード『山田太郎{改行}␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣』
Element ノード『<Age>40<Age>』
Text ノード『{改行}␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣』
この場合、直下の XTextのみを繋げると、
element1 からは『{改行}␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣{改行}␣␣␣␣␣␣␣␣␣␣␣』
element2 からは『山田太郎{改行}␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣{改行}␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣』
が得られるという想定です。