У меня очень большой и очень сложный XML-файл, я хочу извлечь из него только очень специфические элементы. Единственные элементы, которые я хотел бы получить, - это Atcocode, NaptanCode, все элементы в дескрипторе, долгота и широта из состояния перевода и синхронизации, а также тип автобусной остановки из классификации Stop.
Я знаю, что VS может автоматически генерировать класс, но это будет анализировать ненужные детали. Любая помощь будет принята с благодарностью.
Minimal
Фрагмент из XML-файла:
<?xml version="1.0" encoding="utf-8"?>
<NaPTAN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.naptan.org.uk/" CreationDateTime="2018-03-22T08:59:00" ModificationDateTime="2018-03-22T08:59:00" Modification="new" RevisionNumber="0" FileName="NaPTAN030.xml" SchemaVersion="2.1" xsi:schemaLocation="http://www.naptan.org.uk/ http://www.naptan.org.uk/schema/2.1/NaPTAN.xsd">
<StopPoints>
<StopPoint CreationDateTime="2009-07-01T16:36:00" ModificationDateTime="2015-11-03T16:19:00" Modification="revise" RevisionNumber="3" Status="active">
<AtcoCode>030028280001</AtcoCode>
<NaptanCode>brkpjmt</NaptanCode>
<Descriptor>
<CommonName>Tinkers Corner</CommonName>
<Landmark>adj Forbury Lane</Landmark>
<Street>Holt Lane</Street>
<Indicator>opp</Indicator>
</Descriptor>
<Place>
<NptgLocalityRef>E0053849</NptgLocalityRef>
<LocalityCentre>0</LocalityCentre>
<Location>
<Translation>
<GridType>UKOS</GridType>
<Easting>439773</Easting>
<Northing>165685</Northing>
<Longitude>-1.42979961186</Longitude>
<Latitude>51.38882190967</Latitude>
</Translation>
</Location>
</Place>
<StopClassification>
<StopType>BCT</StopType>
<OnStreet>
<Bus>
<BusStopType>CUS</BusStopType>
<TimingStatus>OTH</TimingStatus>
<UnmarkedPoint>
<Bearing>
<CompassPoint>NW</CompassPoint>
</Bearing>
</UnmarkedPoint>
</Bus>
</OnStreet>
</StopClassification>
<StopAreas>
<StopAreaRef CreationDateTime="2009-07-01T16:46:00" ModificationDateTime="2009-07-01T16:46:00" Modification="new" RevisionNumber="0" Status="active">030G58280001</StopAreaRef>
</StopAreas>
<AdministrativeAreaRef>064</AdministrativeAreaRef>
</StopPoint>
...
Например, это был класс C #, который я имел в виду:
class Naptan
{
public string AtcoCode { get; set; }
public string NaptanCode { get; set; }
public long Latitude { get; set; }
public long Longitude { get; set; }
public string TimmingStatus { get; set; }
public string BusStopType { get; set; }
public string CommonName { get; set; }
public string Landmark { get; set; }
public string Street { get; set; }
public string Indicator { get; set; }
}
Полное
Ссылка на весь рассматриваемый XML-файл
В настоящее время я пробовал этот подход, превращая его в файл JSON, а затем анализируя его в классе, а затем вручную просматривая список объектов и создавая новый список объектов, сжатых из исходного класса.
Текущий код
EDIT
Я реализовал метод Prateek Deshmukh, однако он не извлекает конкретные элементы, как было запрошено, поэтому мне также пришлось добавить в этот новый код, что я хотел бы избежать, есть ли у кого-нибудь лучшие предложения ?:
NaPTAN tempRawData;
XmlSerializer serializer = new XmlSerializer(typeof(NaPTAN));
using (FileStream fileStream = new FileStream(@"F:\DfT1.xml", FileMode.Open))
{
tempRawData = (NaPTAN)serializer.Deserialize(fileStream);
}
foreach (var StopPoint in tempRawData.StopPoints)
{
Locations.Add(StopPoint.AtcoCode, new Naptan()
{
NaptanCode = StopPoint.NaptanCode,
Latitude = StopPoint.Place.Location.Translation.Latitude,
Longitude = StopPoint.Place.Location.Translation.Longitude,
TimmingStatus = StopPoint.StopClassification.OnStreet.Bus.TimingStatus,
BusStopType = StopPoint.StopClassification.OnStreet.Bus.BusStopType,
CommonName = StopPoint.Descriptor.CommonName,
Landmark = StopPoint.Descriptor.Landmark,
Street = StopPoint.Descriptor.Street,
Indicator = StopPoint.Descriptor.Indicator
});
}