編輯:雖然這個問題的答案(!感謝湯姆)是技術上從XPath的角度來看是正確的,MS的InfoPath沒有發揮好與人民選擇器。請注意,這不會讓您清除人員選取器並重新分配第一個選定的人員。在人員選擇器已被重新驗證後,InfoPath僅清除預先存在的XML結構。這意味着將應用程序關注於拾取器,然後切換回來。由於MS InfoPath的技術限制,我的最終目標似乎無法完成。在那裏,我希望這證明對其他一些新手有用!XPath表達式中重複父節點選擇元素的第一個實例
問題:我需要選擇重複的父節點中的節點或元素的第一個實例。 (我的術語可能不正確)。試圖從其他帖子適應表達式在這裏stackoverflow無濟於事。
基本情況:使用MS InfoPath中的Person/Group選取器。如果有人在picker字段中選擇多個用戶,我想將其重置爲第一個選定的用戶。問題是表單上有多個選擇器使用類似的XML結構,所以我的XPath不工作...
InfoPath將處理表達式和使用規則以檢查選擇器中是否存在多個用戶。
下面是我的示例XML,然後我沒有表達:
<?xml version="1.0" encoding="UTF-8"?><?mso-infoPathSolution solutionVersion="1.0.0.24" productVersion="14.0.0" PIVersion="1.0.0.0" href="file:///C:\Documents%20and%20Settings\Chris\Local%20Settings\Application%20Data\Microsoft\InfoPath\Designer3\35e8a7eff4a841a9\manifest.xsf" ?><?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?><my:myFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls" xmlns:ma="http://schemas.microsoft.com/office/2009/metadata/properties/metaAttributes" xmlns:d="http://schemas.microsoft.com/office/infopath/2009/WSSList/dataFields" xmlns:q="http://schemas.microsoft.com/office/infopath/2009/WSSList/queryFields" xmlns:dfs="http://schemas.microsoft.com/office/infopath/2003/dataFormSolution" xmlns:dms="http://schemas.microsoft.com/office/2009/documentManagement/types" xmlns:tns="http://microsoft.com/webservices/SharePointPortalServer/UserProfileService" xmlns:s1="http://microsoft.com/wsdl/types/" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-09-06T15:09:43" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-us">
<my:section1>
<my:group>
<pc:Person xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<pc:DisplayName>Green, John</pc:DisplayName>
<pc:AccountId>DOMAIN\John.Green</pc:AccountId>
<pc:AccountType>User</pc:AccountType>
</pc:Person><pc:Person xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<pc:DisplayName>Smith, John</pc:DisplayName>
<pc:AccountId>DOMAIN\john.smith</pc:AccountId>
<pc:AccountType>User</pc:AccountType></pc:Person>
</my:group>
</my:section1>
<my:section2>
<my:group>
<pc:Person xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<pc:DisplayName>Public, John</pc:DisplayName>
<pc:AccountId>DOMAIN\John.Q.Public</pc:AccountId>
<pc:AccountType>User</pc:AccountType>
</pc:Person><pc:Person xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<pc:DisplayName>Doe, John</pc:DisplayName>
<pc:AccountId>DOMAIN\John.Doe</pc:AccountId>
<pc:AccountType>User</pc:AccountType></pc:Person>
</my:group>
</my:section2>
</my:myFields>
下面的表達式返回都域\ John.Green和DOMAIN \和John.Smith ...
/descendant::my:section1/my:group/pc:Person/pc:DisplayName[1]
關閉,但沒有雪茄。
我需要兩個單獨的表達式;一個選擇DOMAIN \ John.Green,另一個選擇DOMAIN \ John.Q.Public。
怎麼樣'//我:SECTION1 /我:group/pc:Person [1]/pc:DisplayName'或'// */my:group/pc:Person [1]/pc:DisplayName'(這個可以一次從所有部分選擇) – toniedzwiedz
@Tom Hey throw throw作爲答案,我會給你信用!我很驚訝這是多麼簡單;我應該自己想想吧!再次感謝:) – Shrout1