При разборе KML / XML выдается ошибка «последовательность не содержит элементов» - PullRequest
0 голосов
/ 22 июня 2019

Итак, я сейчас пытаюсь проанализировать определенные данные в имеющемся у меня документе KML, и после того, как я правильно загрузил документ (проверил, что он был загружен правильно с помощью отладчика), кажется, что он не будет считыватьсяэлементы я пытаюсь скрести.Я продолжаю получать сообщение об ошибке «System.InvalidOperationException: Sequence не содержит элементов».Кто-нибудь может объяснить, почему мой код может не работать?Я исчерпал много документации и других сообщений стека, но безрезультатно.

public async Task ExecuteKMLCrawl()
        {
            var club = new ClubInfo();
            var list = new List<ClubInfo>();
            XDocument xDoc = XDocument.Load(@"C:\Users\downloads\doc.kml");
            XNamespace ns = "http://www.opengis.net/kml/2.2";
            var placemarks =
                (from x in xDoc.Descendants()
                    where x.Name.LocalName == "Placemark"
                    select new XElement(x)).ToList();
            foreach (var placemark in placemarks)
            {
                //club.ClubName = (from x in placemark.Descendants("name") 
                  //  select x).First().Value;

                club.Name = (from x in placemark.Descendants("Data")
                    where x.Attribute("name")?.Value == "President"
                    select x).First().Value;

                club.Email = (from x in placemark.Descendants("Data")
                    where x.Attribute("name")?.Value == "Email"
                    select x).First().Value;

                club.City = (from x in placemark.Descendants("Data")
                    where x.Attribute("name")?.Value == "City"
                    select x).First().Value;

                club.State = (from x in placemark.Descendants("Data")
                    where x.Attribute("name")?.Value == "State"
                    select x).First().Value;

            }
            list.Add(club);
            await _kmlClubs.InsertManyAsync(list);

Код XML / KML, показанный ниже:

<Placemark>
        <name>Club Name</name>
        <address>*Address Contained Here*</address>
        <ExtendedData>
          <Data name="President">
            <value>*President Name*</value>
          </Data>
          <Data name="Email">
            <value>s*President Email*</value>
          </Data>
          <Data name="College/University">
            <value>*College Name*</value>
          </Data>
          <Data name="City">
            <value>*City Name*</value>
          </Data>
          <Data name="State">
            <value>*State Initials*</value>
          </Data>
        </ExtendedData>
      </Placemark>

Результат метки. Потомки ("имя")).К списку();

<Placemark xmlns="http://www.opengis.net/kml/2.2">
  <name>Mississippi State Swim Club</name>
  <address>Mississippi State University Starkville MS</address>
  <description><![CDATA[President: Private Name<br>Email: Private@gmail.com<br>College/University: Mississippi State University<br>City: Starkville<br>State: MS]]></description>
  <styleUrl>#icon-1899-0288D1</styleUrl>
  <ExtendedData>
    <Data name="President">
      <value>Private Name</value>
    </Data>
    <Data name="Email">
      <value>private@gmail.com</value>
    </Data>
    <Data name="College/University">
      <value>Mississippi State University</value>
    </Data>
    <Data name="City">
      <value>Starkville</value>
    </Data>
    <Data name="State">
      <value>MS</value>
    </Data>
  </ExtendedData>
</Placemark>
...