#c# #asp.net #.net #xml #xpath
#c# #asp.net #.net #xml #xpath
Вопрос:
<RepairOrderEvent>
<EventType>Advisor - Shared Guidelines</EventType>
<EventDateTime>2019-01-07T11:18:38.8756279-06:00</EventDateTime>
<EventNotes>FAF: Refinish Time without Haz Waste or EPC Charge; Score: 11; Variance: 0.0; UniqueSequenceNum: 0; Insurance Score: 40</EventNotes>
</RepairOrderEvent>
<RepairOrderEvent>
<EventType>Advisor - Shared Guidelines</EventType>
<EventDateTime>2019-01-07T11:18:38.8756279-06:00</EventDateTime>
<EventNotes>FAF(Best Practice): Must Enter If Vehicle is Drivable; Score: 11; Variance: 0.0; UniqueSequenceNum: 0</EventNotes>
</RepairOrderEvent>
<RepairOrderEvent>
<EventType>Advisor - Shared Guidelines</EventType>
<EventDateTime>2019-01-07T11:18:38.8756279-06:00</EventDateTime>
<EventNotes>FAF(Best Practice): Bumper Overlap Prompt Answered Yes, No Estimate Line Note; Score: 11; Variance: 0.0; UniqueSequenceNum: 2; Insurance Score: 25</EventNotes>
</RepairOrderEvent>
<RepairOrderEvent>
<EventType>Advisor - Shared Guidelines</EventType>
<EventDateTime>2019-01-07T11:18:38.8756279-06:00</EventDateTime>
<EventNotes>FAF(Document): Insufficient Photos Provided: Include Damage Area; Score: 11; Variance: 0.0; UniqueSequenceNum: 0; Insurance Score: 10000</EventNotes>
</RepairOrderEvent>
У меня есть следующие XML-данные. Я пытаюсь найти совокупность «score», а не «score» «Insurance Score». Я думал об использовании Xpath, чтобы найти первое появление score в каждой строке и удалить оставшуюся часть строки. Конечная цель здесь — иметь возможность прочитать каждую строку для первого появления, удалить оставшуюся часть строки и найти сумму баллов.
Любые предложения или помощь приветствуются и ценятся. Спасибо!
Комментарии:
1. Если вы попытаетесь сделать это с помощью простого манипулирования строками, вы окажетесь в мире страданий. Просмотрите файл, используя технологию XML (DOM, Linq4Xml или что-то еще) и удалите атрибут.
2. Не могли бы вы решить эту проблему с помощью Regex? Или есть какое-то ограничение только на использование xpath? Регулярное выражение позволило бы вам извлекать все совпадения в формате:
Score: ##;
и вы могли бы суммировать их таким образом.3. Если порядок элементов string статичен, вы можете использовать следующее выражение XPath-1.0 для получения
Score
значений:substring-before(substring-after(text(),'Score: '),';')
. Оставшаяся задача — добавить результаты.4. @dvo Никаких ограничений, это была всего лишь первоначальная мысль, и я обязательно попробую это сделать теперь, когда вы упомянули об этом.
5. @JVasquez0823 этот шаблон регулярных выражений может помочь:
(?<=; Score: )[^;]
это позитивный взгляд на прошлое. Он соответствует всему, что является «; Score: <что угодно с запятой>», но возвращает только искомое число. Вы можете использовать это, чтобы просмотреть совпадения регулярных выражений, проанализировать число и добавить его к текущему итогу. Попробуйте.
Ответ №1:
Как только вы дойдете до того, что будете обрабатывать значения EventNotes
, вы могли бы сделать что-то вроде этого, предполагая, что у каждого EventNotes
есть какой-то «Score».
var num = eventNotes
.Select(note => note
.Split(";")
.Where(part => part.Contains("Score"))
.Select(score => int.Parse(score.Split(' ')[1]))
.First())
.Aggregate((sum, val) => sum val);
Что дало бы вам сумму всех первых появлений score во всех примечаниях к событиям.
Это предполагает, что у вас уже есть часть синтаксического анализа XML.