#c# #xpath #evaluate #navigator
#c# #xpath #оценить #навигатор
Вопрос:
Есть ли способ проверить, почему вызов XPathNavigator.evaluate() не возвращает узлов?
Например, учитывая следующий XML-документ:
<Vehicles>
<car>
<wheels>4</wheels>
<seats>5</seats>
</car>
</Vehicles>
и следующее выражение XPath:
//Vehicles[((car[wheels = 4 and seats = 2]))]
Я хотел бы получить какое-то указание на то, что узел не был выбран из-за предложения «seats = 2», а не из-за количества колес.
Возможно ли это каким-либо образом?
Ответ №1:
«Почему» — это не тот вопрос, который вы можете автоматизировать. Существует бесчисленное множество причин, по которым выражение XPath не будет выбирать какие-либо узлы. Что, если узлы находятся в неправильном пространстве имен? Что, если бы вы написали «//транспортные средства» вместо «//Vehicles»?
Лучшее, что вы можете сделать, это определить типы условий, которые вы хотите проверить, и протестировать их.
Ответ №2:
следующее выражение XPath:
//Vehicles[((car[wheels = 4 and seats = 2]))]
Я хотел бы получить какое-то указание на то, что узел не был выбран
из-за предложения «seats = 2», а не из-за количества колес.Возможно ли это каким-либо образом?
Это было бы возможно, если бы вы использовали эти выражения:
//Vehicles[car[wheels = 4]]
Здесь, если результат не равен null (или пустой коллекции XmlNode), то вы будете знать, что если следующее выражение:
//Vehicles[car[wheels = 4][seats = 2]]
выбирает 0 узлов, тогда причина этого в том, что есть car
дочерние элементы, у которых есть 4 колеса, но ни у одного из них нет ровно 2 мест.
Комментарии:
1. Я не могу сам писать запросы XPath, чтобы протестировать его подобным образом, потому что запрос XPath, который я хочу протестировать, генерируется во время выполнения. Если только не существует способа разделить предложения «where»
2. @user1041808: Вам следует отредактировать вопрос и объяснить это. В случае, если у вас нет контроля над генерацией выражений XPath во время выполнения, практически невозможно обработать выражение XPath и сделать из него два — если, конечно, вы не напишете свой собственный анализатор XPath.