2012-04-04 2 views
0

Я использую TinyXPath для улучшения существующего тестового инструмента, чтобы можно было извлекать и использовать данные из XML-структуры клиента.В TinyXPath, как запрашивать данные путем индексирования содержимого элемента

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 гуру были бы оценены - спасибо

+0

// Настройки/child :: node() (добавить/текст() в конец, если вы просто хотите использовать текст с включенным/отключенным вместо узлов). Или вы пытаетесь получить только метки A и B? – JWiley

+0

Тест должен возвращать текстовые значения для SomeSetting1 & 2 сначала для плана «Маркированный» A, а затем для плана «Labeled» B. Спасибо. – mactwixs

ответ

0

Это вернет 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() 

Надеется, что это помогает!

+0

Большое спасибо, я попробую это позже сегодня – mactwixs

+0

Не удалось получить tinyxpath, чтобы вернуть результат из вышеперечисленного. Хотя я могу получить // LinkData/Plan/Label/text() для работы - возвращает A, B, C и т. Д., Но добавление [] в запрос, похоже, нарушает его. – mactwixs