2012-09-20 36 views
0

编辑:此问题应为“我如何指向上下文节点中的元素?”在这种情况下,答案很简单。从拉什的回应: "my:Line_Item_Mod_0 = 'true'"始终使用XPath从当前节点返回元素值

另外,请原谅我,如果这是一个非常明显的问题;我不知道“上下文节点”的术语,这可能是为什么谷歌和StackOverflow搜索没有什么帮助。

阅读上下文问题的其余部分。

我需要一个XPath表达式,它返回每个节点中当前的Line_Item_Mod_0值,以便有条件地格式化MS InfoPath表单。我对XPath非常绿色,我不知道这个行为的适当术语(表达式)是什么。下面是我的XML:

<?xml version="1.0" encoding="UTF-8"?><?mso-infoPathSolution solutionVersion="1.0.0.504" productVersion="14.0.0" PIVersion="1.0.0.0" href="file:///C:\Documents%20and%20Settings\Chris\Local%20Settings\Application%20Data\Microsoft\InfoPath\Designer3\c37482678ae440c9\manifest.xsf" ?><?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?><?mso-infoPath-file-attachment-present?> 
<my:myFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:dfs="http://schemas.microsoft.com/office/infopath/2003/dataFormSolution" xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-05-05T19:56:08" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-us"> 
<my:MasterSection> 
    <my:Project_Information> 
     <my:Line_Items> 
      <my:Counter>1</my:Counter> 
      <my:Authorized_Number>4</my:Authorized_Number> 
      <my:XPathLINCounter>Line Item 1</my:XPathLINCounter> 
      <my:Line_Item_Mod_0>false</my:Line_Item_Mod_0> 
     </my:Line_Items> 
     <my:Line_Items> 
      <my:Counter>2</my:Counter> 
      <my:Authorized_Number>7</my:Authorized_Number> 
      <my:XPathLINCounter>Line Item 2</my:XPathLINCounter> 
      <my:Line_Item_Mod_0>true</my:Line_Item_Mod_0> 
     </my:Line_Items> 
     <my:Line_Items> 
      <my:Counter>3</my:Counter> 
      <my:Authorized_Number>2</my:Authorized_Number> 
      <my:XPathLINCounter>Line Item 3</my:XPathLINCounter> 
      <my:Line_Item_Mod_0>false</my:Line_Item_Mod_0> 
     </my:Line_Items> 
    </my:Project_Information> 
</my:MasterSection> 
</my:myFields> 

我想,以评估当前节点“国防部”值是否为1或0。我已经有做这个的表现,但由于某些原因的InfoPath条件格式没有按”不喜欢它。你可以在Line_Item_Mod_0元素中看到这个mod表达式的结果。

我需要做的就是定位每个Line_Items节点内的Line_Item_Mod_0元素。我似乎无法做出一个表达式,返回其父节点的Line_Item_Mod_0的值(或者“当前”是正确的术语)。

I.E. Line_Items节点1将会有一个表达式,它总是返回false的值Line_Item_Mod_0

我意识到这应该是简单的,但我似乎无法让我的表达式坚持在其当前节点。

表达式(count(preceding-sibling::my:*) + 1) mod 2 > 0生成Line_Item_Mod_0节点,但如果将其作为规则应用,则条件格式设置不会很好。我不知道为什么。

我想尝试绕过它并直接评估“真”或“假”值。

+0

”我已经有了一个表达式,但由于某些原因,InfoPath条件格式不喜欢它,您可以在Line_Item_Mod_0元素中看到此模式表达式的结果。“我们应该在哪里看到这个?这句话使得听起来好像上面给出的XML样本的一部分是XPath表达式的* output *,但问题的其余部分表明给定的XML是*输入*到您想要找出的XPath。 – LarsH

回答

1

每当当前节点(上下文节点)是一个<my:Line_Items>元件,下面的XPath表达式将返回其<my:Line_Item_Mod_0>子元素的值:

"my:Line_Item_Mod_0" 

这个XPath表达式实际上将选择一个元素节点;如果该元素节点是在字符串上下文中计算的,则其值将为其子文本节点falsetrue的字符串内容。如果您需要将其转换成一个布尔值,使用,但是

"my:Line_Item_Mod_0 = 'true'" 

注意,这个XPath表达式使用命名空间前缀。为了使该用法有效,您必须在XPath处理器的上下文中声明该名称空间前缀。您尚未显示任何关于如何调用XPath的上下文,但如果您确实向我们显示了该信息,则应该能够帮助验证该部分是否正确完成。

你也提到了“条件格式”几次,但没有足够的细节去处理任何事情。我现在认为它不重要,但是如果它很重要,请编辑您的答案以发布示例,以便我们可以为您提供帮助。 “

+0

谢谢你的回应!这正是我所需要的。实际上,它比我想象的要简单得多...... MS InfoPath正在处理我的XPath;我不知道它是如何处理表达式的。 InfoPath正在应用条件格式(表单字段上的交替阴影)以使表单更具可读性。我想我必须使用某种轴来指向上下文节点(我甚至不知道它被称为上下文节点!)。事实并非如此!我非常感谢你的帮助。 – Shrout1

+0

另外,如果这是一个非常明显的问题,请原谅我;我不知道“上下文节点”的术语,这可能是为什么谷歌和StackOverflow搜索没有什么帮助。 – Shrout1

+0

@Chris:没问题 - 我曾多次在同一条船上,寻找如何做某些事情,而不知道要使用什么条款。这是阅读一两个教程可以花费时间的地方。很高兴有帮助。 – LarsH

相关问题