В TinyXPath, как запросить данные по индексируемым по содержанию элемента
Я использую TinyXPath для улучшения существующего инструмента тестирования, чтобы можно было получать и использовать данные из пользовательской XML-структуры.
XML выглядит так
<Platform>
<LinkData>
<Plan>
<Label>A</Label>
<Settings>
<SomeSetting1>ENABLED</SomeSetting1>
<SomeSetting2>ENABLED</SomeSetting2>
</Settings>
</Plan>
<Plan>
<Label>B</Label>
<Settings>
<SomeSetting1>ENABLED</SomeSetting1>
<SomeSetting2>DISABLED</SomeSetting2>
</Settings>
</Plan>
</LinkData>
</Platform>
Учитывая вышеприведенную структуру, которой я не могу управлять, мне нужно иметь возможность создавать выражения XPath для TinyXPath. Проще говоря, TinyXPath должен возвращать значения в полях SomeSetting1/2, заданных, когда правильные значения дочерних меток совпадают (разрешить в true), чтобы тестовое приложение могло их использовать.
Я пробовал следующее, но борьба со способом индексируется с использованием дочернего элемента (обычно я ожидаю использования атрибута. Вот моя попытка, которая не возвращает результат (например, ENABLED/DISABLED):-
Platform/LinkData/Plan[child::Label='A']/Settings/SomeSetting1/text()
Platform/LinkData/Plan[child::Label='A']/Settings/SomeSetting2/text()
Platform/LinkData/Plan[child::Label='B']/Settings/SomeSetting1/text()
Platform/LinkData/Plan[child::Label='B']/Settings/SomeSetting2/text()
Буду признателен за любую дополнительную помощь от гуру TinyXPath - спасибо!
1 ответ
Этот xpath вернет то, что вы ищете с данным XML:
//Settings/child::node()/text()
Этот xpath также добавит проверку меток и группы по concat. |
:
//LinkData/Plan[Label/text()='A']/Settings/child::node()/text() | //LinkData/Plan[Label/text()='B']/Settings/child::node()/text()
И этот объединяет их обоих внутри проверки метки:
//LinkData/Plan[Label/text()='A' or Label/text()='B']/Settings/child::node()/text()
Надеюсь это поможет!