5

私は多くのリソースを調べ、多くの調査を行い、WebMatrix と C#、Web ページを使用して一度に 1 つの要素にアクセスするために多くの「最良の推測」を試みましたが、私が試みていることは何もありません。

次のような単純な xml ドキュメントを考えてみましょう。

<root>
    <requisitionData>
        <element1>I am element 1</element1>
        <element2>I am element 2</element2>
    </requisitionData>
</root>

次のように foreach ループを使用できることはわかっています。

@using System.Xml.Linq

XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));

foreach (XElement element in doc.Descendants("requisitionData"))
{
    @element.Value
}

もちろん、それはうまく機能します。<element1>しかし、単純に 1 つの要素の値を文字列変数に格納したい場合はどうすればよいでしょうか。

私はここ(以下のリンク)を見てきましたが、このコードの頭や尾を作ることはできません(私にはほとんどC#のように見えませんが、XMLの解析は初めてです...):

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b14ce4d1-77f1-420d-ad91-0989794a1d45/

ここでもチェックしました:XDocumentからXMLノードを取得する方法

しかし、示されているコードは、ここでも意味がありません。これを行うためのより簡単な方法があるに違いないと私は考え続けています。うまくいけば、まったく新しいクエリ手法を学ぶ必要はありません。

---------------------------------私が試したこと---------------- ----------------------

XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));

string element = doc.Descendants("requisitionData").Descendants("element1").Value;

表示されるエラー:「ディレクティブまたはアセンブリ参照の使用がありません

XDocument doc = XDocument.Load(Server.MapPath("~/User_Saves/cradebaugh/testFile.xml"));

XElement element = doc.Descendants("element1");
string val = element.Value;

受け取ったエラー: 型 'System.Collections.Generic.IEnumerable' を 'System.Xml.Linq.XElement' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)

実際、他のことも試しましたが、上記とほぼ同じエラーが発生します。私はこれを実際よりも難しくしていますか、それとも単純化しすぎていますか?

- - - - - - - - - - - - -アップデート - - - - - - - - - - - - ------

これを機能させることができました:

string element = doc.Element("root").Element("requisitionData").Element("element1").Value;

@element

ただし、このアプローチについて私が懸念していることの 1 つは.Element、「最初の」一致を選択することです。そのため、xml ドキュメントでは次のようになります。

<root>
    <requisitionData>
        <element1>I am element 1</element1>
        <element2>I am element 2</element2>
    </requisitionData>
    <requisitionData>
        <element1>I am element 1</element1>
        <element2>I am element 2</element2>
    </requisitionData>
</root>

の 2 回目の発生にアクセスするにはどうすればよい<element1>ですか?

4

1 に答える 1