Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用XPath返回初始值或最近发生的情况,然后运行运算符_Xml_Xpath_Infopath - Fatal编程技术网

Xml 使用XPath返回初始值或最近发生的情况,然后运行运算符

Xml 使用XPath返回初始值或最近发生的情况,然后运行运算符,xml,xpath,infopath,Xml,Xpath,Infopath,我在MS InfoPath中有以下XPath 1.0表达式(我将发布附带的XML): //my:Value\u-Modifier\u-Group[1=count(以下兄弟姐妹::my:Value\u-Modifier\u-Group)]//my:Modified\u-Start\u-Value[(text())].//my:Start\u-Value[text()和not(//my:Value\u-Modifier\u-Group[1=count(以下兄弟姐妹姐妹姐妹姐妹姐妹姐妹姐妹姐妹::my

我在MS InfoPath中有以下XPath 1.0表达式(我将发布附带的XML):

//my:Value\u-Modifier\u-Group[1=count(以下兄弟姐妹::my:Value\u-Modifier\u-Group)]//my:Modified\u-Start\u-Value[(text())].//my:Start\u-Value[text()和not(//my:Value\u-Modifier\u-Group[1=count(以下兄弟姐妹姐妹姐妹姐妹姐妹姐妹姐妹姐妹::my:Value\u-Modifier\u-Group)]//my:Modified\u-Start\u-Value[(text())].

如果存在初始值且没有“修改值”,则返回初始值。如果存在修改值,则返回

我需要返回该值,然后对其执行以下操作:

number(//my:Value\u-modified\u-Start\u-Value)+number(//my:Value\u-modified\u-Start\u-Value)+number(//my:Value\u-Modifier\u-Group[0=count(following-sibling::my:Value\u-Modifier\u-Group)]//my:Start\u-Value\u-address-number(//my:Value\u-Modifier\u-Group[0=count my:sibling::my:Value\u-Modifier\u-Group)]//my:Start\u-Value-reduce

此操作添加或减去增加/减少值。问题是,如果不存在
Modified\u Start\u value
,此表达式将返回一个NaN。否则效果很好

我需要将这两个表达式组合成一个XPath表达式

  • 如果
    Modified\u Start\u Value
    前面有一个值,请在操作中使用该值
  • 如果
    Modified_Start_Value
    没有前面的值,则在操作中使用
    Start_Value
  • 重要的是,我总是使用“previous”值,因为previous值是固定的。它充当参考点或起点
下面是我正在使用的XML示例:

<?xml version="1.0" encoding="UTF-8"?><?mso-infoPathSolution solutionVersion="1.0.0.2" productVersion="14.0.0" PIVersion="1.0.0.0" href="file:///C:\Documents%20and%20Settings\Chris\Local%20Settings\Application%20Data\Microsoft\InfoPath\Designer3\ef41a19775b4ce0\manifest.xsf" ?><?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.3"?>
<my:myFields xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-09-19T13:28:35" xml:lang="en-us">
<my:Start_Value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">6</my:Start_Value>
<my:Main_Group>
    <my:Value_Modifier_Group>
        <my:Modified_Start_Value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">6</my:Modified_Start_Value>
        <my:Start_Value_Increase>0</my:Start_Value_Increase>
        <my:Start_Value_Decrease>0</my:Start_Value_Decrease>
    </my:Value_Modifier_Group>
<my:Value_Modifier_Group>
    <my:Modified_Start_Value>6</my:Modified_Start_Value>
    <my:Start_Value_Increase>0</my:Start_Value_Increase>
    <my:Start_Value_Decrease>0</my:Start_Value_Decrease>
</my:Value_Modifier_Group></my:Main_Group>
</my:myFields>

6.
6.
0
0
6.
0
0

我希望这个问题不要太匆忙!今天很忙…

好的,我将在我刚刚解决这个问题时自我回答

关键是将第一个表达式中的值放入一个节点,然后在第二个表达式中引用该节点,从而组合XPath表达式


管道命令似乎不能很好地与其他操作员配合

以下表达式按以下方式返回值:

  • //my:Value\u-Modifier\u-Group[1=count(以下兄弟姐妹::my:Value\u-Modifier\u-Group)]//my:Modified\u-Start\u-Value[(text())].//my:Start\u-Value[text()和not(//my:Value\u-Modifier\u-Group[1=count(以下兄弟姐妹姐妹姐妹姐妹姐妹姐妹姐妹姐妹::my:Value\u-Modifier\u-Group)]//my:Modified\u-Start\u-Value[(text())].
  • 如果在第一个
    Modified_Start_Value
    节点之前没有前面的
    Modified_Start_Value
    可用,则表达式默认为初始值
  • 这样,您就可以保证最新的有效
    Start\u值
    Modified\u Start\u值
然后将此表达式的值放入名为
StartVModStart
的节点中。然后将此节点的XPath放入求值表达式中:

。/../../my:StartVModStart+number(/genderant或self::node()/my:Value\u Modifier\u Group[0=count(跟随兄弟姐妹::my:Value\u Modifier\u Group)]///my:Start\u Value\u Increase)-number(/genderant或self::node()/my:Value\u Modifier\u Group[0=count(跟随兄弟姐妹姐妹姐妹姐妹姐妹姐妹姐妹::my:Value\u Modifier\u Group)]///my:Start\u Value\u Decrease)

  • 此表达式使用“最新”值,然后添加或减去更改
通过这种方式,可以在文档的整个过程中保持“运行总和”,从初始节点开始,一直移动到重复节点


这个问题似乎非常复杂,如果我的问题和答案都不清楚,请原谅。随着我开始使用更复杂的功能,所需的XPath表达式变得越来越复杂。

“管道命令似乎不太好”您是指“布尔逻辑”下的“还是”操作数?我相信在Infopath XPath中(在MS Infopath中)我所体验到的是,当a |被放入一个也有+或-的表达式时,整个事情似乎变得混乱。很可能我不知道自己在做什么(这似乎是我最近出现问题的最常见原因…)但在将初始表达式拆分为两个表达式并将第一个表达式的值存储在节点中之后,问题就消失了。