3

LINQ を使用した XML ファイルからの読み取りに問題があります。

ここに私のXMLファイルがあります

<?xml version="1.0" encoding="utf-8"?>
<Employees>
  <Employee>
    <Name Type="First">Jack</Name>
    <Name Type="Last">Black</Name>
  </Employee>
  <Employee>
    <Name Type="First">John</Name>
    <Name Type="Last">Blue</Name>
  </Employee>
  <Employee>
    <Name Type="First">Dan</Name>
    <Name Type="Last">Red</Name>
  </Employee>
  <Employee>
    <Name Type="First">Patrick</Name>
    <Name Type="Last">Green</Name>
  </Employee>
</Employees>

私が使用しているコードは次のとおりです

    XElement doc = XElement.Load("xmldoc.xml");
    var query = from x in doc.Elements("Employee") where x.Element("Name").Attribute("Type").Value == "First" select x;
    foreach (XElement item in query)
    {
        Console.WriteLine(item.Element("Name").Value);
    }

このコードはすべての名前を返しますが、属性値を最初から最後に変更すると空白になります。

名前ノードを切り替えると、姓が返されます。私にとっては、各従業員クエリが最初の名前ノードから値を返し、2 番目のノードを無視しているように見えます。これを修正するのを手伝ってもらえますか?

4

1 に答える 1

5

問題は、呼び出しが最初の要素x.Element("Name")を返すことです。Name実際には、すべての要素を照会し、属性値Nameを持つ要素をフィルター処理する必要があります。Last

代わりにこれを試してください:

var query = from x in doc.Elements("Employee").Elements("Name")
            where x.Attribute("Type").Value == "Last"
            select x;

foreach (XElement item in query)
{
    Console.WriteLine(item.Value);
}
于 2013-10-04T15:55:58.347 に答える