2

在将“Double Eval”XPath 表达式与 MS InfoPath 结合使用来捕获重复结构的内容时遇到尾随分号问题。我需要从结果中消除尾随分号。这是表达式:

eval(eval(Repeater, 'concat(my:Node1DropDown, ";")'), "..")

上述表达式的结果可以在以下 XML 中的“Node1Eval”中看到。除了结果中的尾随分号外,表达式会很好。

<?xml version="1.0" encoding="UTF-8"?><?mso-infoPathSolution solutionVersion="1.0.0.4" productVersion="14.0.0" PIVersion="1.0.0.0" href="file:///C:\Documents%20and%20Settings\Chris\Local%20Settings\Application%20Data\Microsoft\InfoPath\Designer3\e2c7e5c6af2049e9\manifest.xsf" ?><?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?>
<my:myFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-08-28T16:45:10" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-us">
<my:Master_Section>
    <my:group2>
        <my:Repeater>
            <my:Node1DropDown>Lasers</my:Node1DropDown>
            <my:Node2DropDown>Lemon</my:Node2DropDown>
        </my:Repeater>
        <my:Repeater>
            <my:Node1DropDown>Sharks</my:Node1DropDown>
            <my:Node2DropDown>Apple</my:Node2DropDown>
        </my:Repeater><my:Repeater>
            <my:Node1DropDown>Monkeys</my:Node1DropDown>
            <my:Node2DropDown>Lemon</my:Node2DropDown>
        </my:Repeater>
    </my:group2>
    <my:Node1Eval>Lasers;Sharks;Monkeys;</my:Node1Eval>
    <my:Node2Eval>Lemon;Apple;Lemon;</my:Node2Eval>
</my:Master_Section>
</my:myFields>

我猜想添加一些与返回项目的位置相关的逻辑可以帮助消除尾随分号。

问题的真正症结在于分号始终存在。我需要该Node1Eval字段为,直到它实际上具有要显示的值。如果不是,那么它将与[text()]我尝试运行的 XPath 表达式测试混淆。

4

1 回答 1

1

表示你的

eval(eval(Repeater, 'concat(my:Node1DropDown, ";")'), "..")

X,它将是

子字符串(X,1,字符串长度(X)-1)

最终给予

substring(eval(eval(Repeater, 'concat(my:Node1DropDown, ";")'), ".."); 1, 字符串长度(eval(eval(Repeater, 'concat(my:Node1DropDown, ";" )'), "..")) - 1)

更新:
如果您通过“ substring(eval(eval( ”) 进行搜索,您可以确认它在 Infopath 中经常用于重复控件,例如,本讨论

我需要 Node1Eval 字段为空,直到它实际上具有要显示的值

在 Infopath Designer 中,在您的规则操作(或默认值)上,无论您在何处插入和编辑 Xpath 表达式,按fx > 双击Repeater > 按Filter data...按钮并插入您希望的任何条件。
对于 Node1DropDown 非空白的情况,它可能会导致

eval(eval(Repeater[Node1DropDown != ""], 'concat(my:Node1DropDown, ";")'), "..") 
于 2012-09-14T18:57:03.177 回答