простой парсинг xml

Понял! Проблема заключалась во включении __stdcall в объявление функции или, скорее, в __stdcall в определении типа указателя на функцию. Кажется, что при определенных сочетаниях архитектуры __stdcall может вызывать или не вызывать ошибку преобразования типа, если __stdcall также отсутствует в определении типа указателя. Объявление типа моего указателя на функцию выглядит следующим образом:

typedef double(__stdcall *convertFunc)(EUnits, EUnits, double);
typedef int(__stdcall *convertFuncD)(EUnits, EUnits, double*,double*,int);
typedef int(__stdcall *convertFuncF)(EUnits, EUnits, float*, float*, int);

исправили ошибку!

7
задан ChrisCa 16 February 2009 в 03:45
поделиться

4 ответа

using System.IO;
using System.Xml;
using System.Xml.XPath;

. . .

    string xml = @"<poi>      
                     <city>stockholm</city>  
                     <country>sweden</countr>
                        <gpoint>        
                            <lat>51.1</lat>        
                            <lng>67.98</lng>    
                        </gpoint>
                   </poi>";

    XmlReaderSettings set = new XmlReaderSettings();
    set.ConformanceLevel = ConformanceLevel.Fragment;

    XPathDocument doc = 
        new XPathDocument(XmlReader.Create(new StringReader(xml), set));

    XPathNavigator nav = doc.CreateNavigator();


    Console.WriteLine(nav.SelectSingleNode("/poi/gpoint/lat"));
    Console.WriteLine(nav.SelectSingleNode("/poi/gpoint/lng"));

Вы могли, конечно, использовать xpath SelectSingleNode выбрать <gpoint> элемент в переменную.

7
ответ дан 6 December 2019 в 05:39
поделиться

Использование Linq для XML:

   XDocument doc= XDocument.Parse("<poi><city>stockholm</city><country>sweden</country><gpoint><lat>51.1</lat><lng>67.98</lng></gpoint></poi>");

    var points=doc.Descendants("gpoint");

    foreach (XElement current in points)
    {
        Console.WriteLine(current.Element("lat").Value);
        Console.WriteLine(current.Element("lng").Value);
    }

    Console.ReadKey(); 
18
ответ дан 6 December 2019 в 05:39
поделиться

Еще более простой, чем ответ Mitch Wheat, так как рассматриваемый фрагмент является правильно построенным XML-документом:

using System.Xml;
using System.IO;

...

string xml = @"<poi>
                  <city>stockholm</city>
                  <country>sweden</country>
                  <gpoint>
                    <lat>51.1</lat>
                    <lng>67.98</lng>
                  </gpoint>
              </poi>";

XmlDocument d = new XmlDocument();
d.Load(new StringReader(xml));
Console.WriteLine(d.SelectSingleNode("/poi/gpoint/lat").InnerText);
Console.WriteLine(d.SelectSingleNode("/poi/gpoint/lng").InnerText);
4
ответ дан 6 December 2019 в 05:39
поделиться

Если можно использовать LINQ для XML, можно считать те два значения, прямые как это:

var doc = XDocument.Parse("...");
var point = doc.Element("poi").Element("gpoint");
Console.WriteLine("Lat: {0}, Lng: {1}",
    point.Element("lat").Value,
    point.Element("lng").Value);

При необходимости в них как дважды, необходимо преобразовать их:

double lat = Convert.ToDouble(point.Element("lat").Value,
                 CultureInfo.InvariantCulture);

Не забывайте указывать культуру, которая использует точку для частей. Иначе это уступило бы 511.0 как широта.

3
ответ дан 6 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: