2

Windows phone のアプリで xml を解析しています。私のXMLは次のようになります:

<?xml version="1.0" encoding="utf-8" ?>
<people>
    <person name="Kurt Cobain">
      <overall>
  
      </overall>
      <childhood>
  
      </childhood>
      <youth>
  
      </youth>
  
     <picture1>
  
      </picture1>
    </person>
  
</people>

人物ノードごとに異なるため、人物ノードの要素の名前(全体、子供時代、若者など)を取得する必要があります。これまでのコードは次のとおりですが、クエリの結果は null になります。

XDocument loadedXml = XDocument.Load("people.xml");

                    var data = from query in loadedXml.Descendants("person")
                               where ((query.Attribute("name").Value as string).Equals("Kurt Cobain"))
                               select query.Elements();

                    
                     string test = "";
                     foreach (var item in data)
                     {
                         
                             test + = (item as XElement).Name.LocalName;
                         
                     }
                     MessageBox.Show(test);
4

3 に答える 3

2
var data = from item in loadedXml.Descendants("person")
                   where ((item.Attribute("name").Value as string).Equals("Kurt Cobain"))
                   select item;

string test = "";
foreach (var item in data)
   test += item.Attribute("name").Value;
于 2012-07-26T13:22:09.953 に答える
2

.Elements()linq から削除します。

var data = from query in loadedXml.Descendants("person") 
           where ((query.Attribute("name").Value as string).Equals("Kurt Cobain")) 
           select query;
于 2012-07-26T13:22:39.517 に答える
1

コードの一部でXElementを使用しようとしているようですが、他の提案は機能するはずですが、次のことも実行できます。

  XElement loadedXml = XElement.Load("people.xml");

  string test = "";

  foreach (var item in loadedXml.XPathSelectElements("person[@name='Kurt Cobain']"))
  {
  test += item.Attribute("name").Value;
  }

または、そのようにすることもできます(ただし、読みにくくなります)。

 XElement loadedXml = XElement.Load("people.xml");

 string test = loadedXml.XPathSelectElements("person[@name='Kurt Cobain']").Aggregate("", (current, item) => current + item.Attribute("name").Value);
于 2012-07-26T14:04:33.197 に答える