2012-09-20 37 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

相關問題