Я пытаюсь создать форму Infopath, которая использует каскадные выпадающие списки, чтобы вести пользователя по дереву решений.Данные для заполнения раскрывающихся списков хранятся в XML-соединении данных, и многие элементы в электронной таблице содержат повторяющиеся данные.
My .xml Data Connection выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sections>
<section make="Ford" model="Mustang" numCylinder="8" cost="30000"/>
<section make="Ford" model="Focus" numCylinder="4" cost="22000"/>
<section make="Ford" model="Fiesta" numCylinder="4" cost="18000"/>
<section make="Ford" model="Taurus" numCylinder="6" cost="28000"/>
<section make="Chevrolet" model="Camaro" numCylinder="8" cost="31000"/>
<section make="Chevrolet" model="Cruze" numCylinder="4" cost="21000"/>
<section make="Chevrolet" model="Sonic" numCylinder="4" cost="16000"/>
<section make="Chevrolet" model="Malibu" numCylinder="6" cost="24000"/>
</sections>
В форме Infopath первое, что выберет пользователь, это сделать из выпадающего списка.Затем пользователь выбирает количество цилиндров в раскрывающемся списке.Наконец, в форме Infopath отобразятся модель и стоимость, связанные с маркой и количеством выбранных цилиндров.
Проблема, с которой я сталкиваюсь, заключается в том, что я использую фильтры выражений xPath:
not(. = ../preceding-sibling::section/@make) and ../@make = xdXDocument:get-DOM()/my:myFields/my:makeBox
и
not(. = ../preceding-sibling::section/@numCylinder) and ../@numCylinder = xdXDocument:get-DOM()/my:myFields/my:numCylinderBox
в окне списка изготовителей и количества цилиндров для удаления повторяющихся записей из полей раскрывающегося списка.При этом, если пользователь выбирает Chevrolet в качестве марки, раскрывающийся список количества цилиндров становится пустым, поскольку все записи в разделе количества цилиндров, связанных с Chevrolet, дублируются из записей Ford.
ЧтоЯ думаю, что я должен сделать, это переместить логику из этого оператора:
../@numCylinder = xdXDocument:get-DOM()/my:myFields/my:numCylinderBox
в параметр оператора not (...), чтобы он выбирал только те записи, атрибут make которых равен марке, выбранной всделать выпадающий список.Однако я не смог реализовать это с помощью следующего утверждения:
not(. = ../preceding-sibling::section[@Make = xdXDocument:get-DOM()/my:myFields/my:makeBox]/@numCylinder)
Для меня это должно заставить предшествующий брат работать только с записями, атрибут make которых равен make, выбранному в make drop.вниз список.
Что я делаю не так?Я на правильном пути?