2

私はLinqにXMLを初めて使用します。この質問は本当に単純に思えますが、私には理解できないようです。うまくいけば、誰かが私を助けることができます。私はこのようなsoapresponseを受け取ります:

<customernumbers>    
     <customernumber>99999</customernumber>      
     <customernumber>27554</customernumber>          
     <customernumber>27555</customernumber>       
</customernumbers>

そして、このXMLドキュメントをリストで解析したいと思います。私はこのコードを使用します:

var xml = XDocument.Load (@"c:\\mydata.xml");
var query =from e in xml.Elements("customernumbers")
    select e.Value;
query.Dump();

    5IEnumerable<String> (1 item)  
    999992755427555

私が欲しいのは、3つの顧客番号を分離することです。1つの文字列ではありません。

どんな助けでも大歓迎です。

//ファン

4

3 に答える 3

2

クエリは基本的にルートノードの値を選択します<customernumbers>が、XElement.Valueプロパティは、例が示しているとおりにまとめられたすべての子ノードの値を返します。代わりに行う必要があるのは、代わりにクエリ内の各子ノードを選択することです。

クエリとまったく同じ形式を使用するには、もう1つのElements()メソッドを追加する必要があります。

var query = from e in xml.Element("customernumbers").Elements()
            select e.Value;

queryこれで、3つのオブジェクトのコレクションが含まれString、それぞれに子ノードの1つの値が含まれます。

異なる名前の子要素があり、特定の名前の要素の値のみが必要な場合は、これも変更できます。

var query = from e in xml.Element("customernumbers").Elements("customernumber")
            select e.Value;

これで、「customernumber」という名前の子要素queryの値のコレクションが含まれます。String

これをさらに短くすることができます:

var query = from e in xml.Descendants("customernumber")
            select e.Value;

これはまったく同じことをします。XMLの正確な構造がわからない場合や、非常に複雑な場合は、これははるかに簡単です。欠点は、XMLツリー内の場所に関係なく、「customernumber」という名前の子、孫、またはその他のノードを選択することです。したがって、<customernumber>選択したくないタグを持つ複数の異なるノードがある場合、これはアプローチは正しく機能しません。

于 2012-09-12T15:22:29.867 に答える
1

これを試して、子要素を繰り返します。

    var query = from e in xml.Element("customernumbers").Elements("customernumber")
                select e.Value;
于 2012-09-12T14:41:55.043 に答える
0

試す、

List<string> customerNumbers = (from e in xmlelement.Elements("customernumber")
                    select e.Value).ToList<string>();
于 2012-09-12T16:23:59.127 に答える