У меня есть XML-вывод из машинного тестирования, который выглядит следующим образом: мне нужно извлечь конкретные данные из узла, который я не могу указать для каждого теста:
<TestResult>
<MethodResult
X
X
X
<StepResult name = "FlowError" status = "ProductFailure">
<ActualValue>
<Number value = "3" />
</ActualValue>
<Limit constraint Type = "In Range" name = "FlowError">
<Low>
<Number value = "5" />
</Low>
<High>
<Number value = "6" />
</High>
</Limit>
<Error source="X" code="Y" mesg="Failed for X; Value was 3, expected [5 to 6]/>
</StepResult>
</MethodResult>
</TestResults>
Как вы можете догадаться, есть много других результатов шага, обозначенных знаком X, которые я просто не смог полностью перечислить. В каждом тестовом случае есть вероятность того, что тестируемая машина может выйти из строя, и в узле, соответствующем тестовому примеру (давление, расход, утечка и т. Д., Будет сгенерирована ошибка)
Мне нужно найти способ произвольного вывода параметров сбоя при сбое машины. Обратите внимание, что каждый раз, когда машина выходит из строя, она выводит статус «ProductFailure» для последнего узла StepResult. А затем мне нужно извлечь нижний предел, верхний предел, а также фактическое значение.
Пока что я могу извлечь фактическое значение, указав узел, используя следующий скрипт:
Select
f.ResultXML.value('(/TestResults/MethodResult/StepResult[@name="FlowError"]/ActualValue/Number)[1]/@value', 'varchar(max)') As "Actual Value"
From TestResult.ResultData
Однако приведенный выше код будет выводить значения только при сбое в работе машины. Ошибка давления и ошибка утечки, например, не будут отображать значение (которое мне также нужно)
Я подумал, что могу просто изменить @Name на @Status и попросить его искать «ProductFailure», это даст мне результаты неудачного шага каждый раз, вместо того, чтобы я указывал FlowError, но вместо этого он каждый раз возвращает Null.
Мне интересно, как я могу извлечь строки для фактического значения, верхнего предела и нижнего предела без необходимости указывать фактическое сообщение об ошибке "FlowError" или любые другие ошибки.
Заранее спасибо
Edit:
Добавление фактического XML из базы данных [MSPTestResult]. [MSPTestResult]. [ResultData], который я буду удалять позже из-за потенциально конфиденциальной информации.
Edit:
Вопрос ответил, проблема заключалась в том, что мой запрос должен был указать каждый отдельный узел, который уникален, например, StepResult [@ name = "Ошибка продукта"], а затем перейти в Limit [@constraint type = "In Range"] и т. Д.