0

私はlinq、特にlinq to xmlを使用するのが初めてで、結果を反復しようとして問題が発生しています。私のxmlドキュメントには、単一の親ノードにネストされた同じ名前の複数のノードがあり、正しい結果セットを返す次のlinqクエリを使用しました。

var listingAgentElements = from p in _xElement.Descendants("commercial") select p.Elements("listingAgent");

私のxmlの形式は次のとおりです。

<commercial>
    <listingAgent id="1">
    <listingAgent id="2">
    <listingAgent id="3">
 </commercial>       

すべてのリスティング エージェントを含む結果セットを取得していますが、何らかの理由で、listingAgentElements に対して次の foreach ループを実行しようとすると、ループしようとする各要素には、3 つのすべての listingAgents とまったく同じ結果セットがあるように見えます。

foreach (var element in listingAgentElements)
{
    var test = element;
}

各 listingAgent には一連の子要素があり、xml インポート コンソール アプリを実行しているように、ループして DB に格納する値を取得したいと考えています。

クエリに問題があるようですが、よくわかりません。誰か助けてください。

4

2 に答える 2

0

わかりましたので、あなたが投稿したものから、listingAgentElements実際には2つ_xElement.Descendants("commercial")の列挙型が含まれているように見えます.1つは(1つしかない場合でも.Descendants、列挙可能なリストを返します).Elements("listingAgent")

私は推測を危険にさらし、あなたが投稿した XML から、あなたのforループは一度しか実行されていないと言いたいですか? これは、列挙可能な for をループしていることを意味するため_xElement.Descendantscommercial実際には 3 つの listingAgent すべてを含む別の列挙可能です。

XML に「商用」タグが 1 つしかない場合は、 を使用してそれを取得し.Element("commercial")ます。または、それが XElement オブジェクトのルートである場合は、その部分を気にする必要さえありません。

したがって、オプションは次のとおりです。「商用」タグが1つだけあり_xElement実際にはこれを表すXElementである場合は、次を使用します。

   var listingAgentElements =  from p in _xElement
                               select p.Elements("listingAgent");

「商用」タグが 1 つあるが、それがルートではない場合は、_xElement次を使用します。

   var listingAgentElements =  from p in _xElement.Element("commercial")
                               select p.Elements("listingAgent");

「商用」タグが 1 つしかなく、実際には の_xElement場合は、次を使用します。XDocument

   var listingAgentElements =  from p in _xElement.Root
                               select p.Elements("listingAgent");

複数の「商用」タグがある場合は、元のクエリを使用しますが、2 回ループします。次に例を示します。

    foreach (var commercial in listingAgentElements)
    {
        foreach (var element in commercial)
        {
            var test = element;
        }
    }

これらのソリューションの 1 つは、必要な listingAgents のリストを提供するはずです。説明が必要な場合は、コメントを投稿してください。必要に応じて回答を編集します。

余談ですが、XML のフォーマットを確認します。これをコピーして貼り付けた場合は、 または のいずれかでタグを閉じる必要がありlistingAgentます。ここで、listingAgent にはよ​​り多くのタグが含まれていると述べたので、関連する部分だけを投稿するようにコードを切り詰めただけだと思いますが、注目する必要があるかもしれないものだけです。(Linq2XML を使用して XML を作成している場合、これはとにかく自動的に処理されます)。<listingAgent id="1" /><listingAgent id="1"></listingAgent>

于 2013-09-30T09:25:23.543 に答える