我正在尝试构建一个Infopath表单,该表单使用级联下拉框引导用户沿着决策树。填充下拉框的数据存储在.xml数据连接中,电子表格中的许多项目都有重复数据。
我的.xml数据连接如下:
<?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
在make和圆柱数下拉下拉列表框中,从下拉列表框中删除重复的条目。通过这样做,如果用户选择雪佛兰作为品牌,则气缸数下拉列表框为空,因为与雪佛兰相关联的气缸数部分中的所有条目都与福特条目重复。
我认为我应该做的是从这句话中移开逻辑:
../@numCylinder = xdXDocument:get-DOM()/my:myFields/my:numCylinderBox
到not(...)语句的参数中,以便它只选择make属性等于make下拉列表框中选择的make的条目。但是,我无法通过以下声明实现此目的:
not(. = ../preceding-sibling::section[@Make = xdXDocument:get-DOM()/my:myFields/my:makeBox]/@numCylinder)
对我来说,这应该强制先前兄弟只对在make下拉列表框中make属性等于make的条目有效。
我做错了什么?我是在正确的轨道上吗?