работа с дублирующимися данными в подключении к данным xml infopath - PullRequest
0 голосов
/ 19 июня 2011

Я пытаюсь создать форму 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.вниз список.

Что я делаю не так?Я на правильном пути?

...