C#をつかって、XMLファイルを読み出し、値を検索しようとしていますが、ほしい情報をとることができません。もしわかる方がいましたら、ご回答よろしくおねがいします。
XMLは下記の形式で、このtableが4つ続いてあります。
<table>
<row>
<column name="Tests">Tests Textvalues</column>
</row>
<row>
<column name="A">Id</column>
<column name="B">Description</column>
<column name="C">Value</column>
</row>
<row>
<column name="A">1</column>
<column name="B">no</column>
<column name="C">34 25 E0</column>
</row>
<row>
<column name="A">2</column>
<column name="B">yes</column>
<column name="C">34 25 E1</column>
</row>
</table>
<table>.....つづく
下記のようなコードを書きました。
XElement xelement = XElement.Load(ファイルパス);
IEnumerable<XElement> tables = xelement.Elements();
foreach (XElement table in tables)
{
var name = from nm in table.Elements("row")
where (string)nm.Element("colmun").Attribute("B")== "no" select nm;
foreach (var a in name)
{
Console.WriteLine(a);
}
}
残念ながら、このコードでは、nameの中身がからっぽです。
目的は、Bの値からCの値を検索することです。
以上、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
もしかして XMLファイルの構造が ルートレベルが複数(この場合tableタグ)になっていませんか?
MSXMLだと 単一ルートのファイルを想定しているようですので …
<myDS>
<table>
<row>
<column name="Tests">Tests Textvalues</column>
</row>
<row>
<column name="A">Id</column>
<column name="B">Description</column>
<column name="C">Value</column>
</row>
<row>
<column name="A">1</column>
<column name="B">no</column>
<column name="C">34 25 E0</column>
</row>
<row>
<column name="A">2</column>
<column name="B">yes</column>
<column name="C">34 25 E1</column>
</row>
</table>
<table>
... つづく
</table>
</myDS>
といった具合に ルートのタグを追加してみるとか …
または FileStreamなどで中身を取得して ルートのタグを追加するとか
TextReader rd = new StreamReader("ファイルパス")
sXml = "<ds>" + rd.ReadToEnd() + "</ds>";
rd.Close();
XElement element = XElement.Parse(sXml);
といった具合でelementを構築するとか …
この回答への補足
Rootを追加してみました。
そうすると、Rowの取得の前にもう一段階、Tableの取得がくる訳ですよね。
var name = from nms in table.Elements("table") // tableの取得
from nm in nms.Elements("row") // columnの取得
from cols in nm.Elements("column") // columnの取得
from names in cols.Attributes("name") // name属性の取得
where names.Value == "B" && cols.Value == "no" // name属性の検査と columnの値の検査
select nm;
上記のように書き換えてみたのですが、取得できませんでした。
ということで、若干あきらめて、普通にテキストとして読み込んで、
String contains とif分を駆使しようかと思っています。
No.1
- 回答日時:
見当違いの回答かもしれませんが …
このwhere句だと <column name="A">Id</column> に対する Attributeを取得してしまうのではないかと思います
var name = from nm in table.Elements("row") // rowの取得
from cols in nm.Elements("column") // columnの取得
from names in cols.Attributes("name") // name属性の取得
where names.Value == "B" && cols.Value == "no" // name属性の検査と columnの値の検査
select nm;
といった具合で
この回答への補足
ありがとうございます。
fromを複数回かけることを知りませんでした。ためしにコードを書き換えて実行してみたのですが、
何も値を取得できませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelでなぜこのような式をつかっているのでしょうか、行に1,2,3と連番を振るだけなのに 5 2023/04/08 20:00
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- Visual Basic(VBA) エクセル VBA 難しいです 1 2023/02/21 15:39
- Excel(エクセル) Excel 、この式はどのように解釈すればいいのでしょうか 4 2023/02/03 08:53
- JavaScript gasについて 1 2022/05/31 21:51
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Excel(エクセル) 何故割り算なのでしょうか? 6 2022/11/09 13:30
- その他(パソコン・スマホ・電化製品) pthonのframeに演算結果(数値)を表示したい 1 2023/06/05 22:08
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++ (ADO) で Access の Yes/N...
-
VBScriptにて、csvファイルから...
-
エラーがよくわからないです
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
count関数の値をwhere句で使用...
-
select文の実行結果に空白行を...
-
テーブルの最後(最新)のレコー...
-
レコードの登録順がおかしい
-
group byの並び順を変えるだけ...
-
SELECT FOR UPDATE で該当レコ...
-
AccessのSQL文で1件のみヒット...
-
【PL/SQL】FROM区に変数を使う方法
-
複数のテーブルから値を合計出...
-
BLOBやCLOBのパフォーマンスを...
-
where句中のtrim関数について
-
SQL*Loader Append
-
<SQL>重複しているデータの場合...
-
1の行を固定した上でVBAを用い...
-
並べ替えについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++ (ADO) で Access の Yes/N...
-
VBScriptにて、csvファイルから...
-
[ADO.NET]Accessの日付型にデー...
-
一意なID
-
PL/SQLの動的SQLで複数の項目を...
-
windowsとlinuxでのlexの実行結...
-
エラーがよくわからないです
-
Ruby on RailsでDBカラムにハイ...
-
SQLローダーCSV取込で、囲み文...
-
テーブルの最後(最新)のレコー...
-
select文の実行結果に空白行を...
-
<SQL>重複しているデータの場合...
-
エクセルのソートについて
-
【PL/SQL】FROM区に変数を使う方法
-
単一グループのグループ関数で...
-
count関数の値をwhere句で使用...
-
複数のテーブルから値を合計出...
-
SELECT FOR UPDATE で該当レコ...
-
AccessのSQL文で1件のみヒット...
-
2つの列が同じ値の行を取得するSQL
おすすめ情報