0

編集:この質問に対する回答 (Tom に感謝します!) は XPath の観点からは技術的には正しいのですが、MS InfoPath は People Picker とうまく連携しません。これにより、ユーザー ピッカーをクリアして、最初に選択したユーザーを再割り当てすることはできないことに注意してください。InfoPath は、ユーザー ピッカーが再検証されたにのみ、既存の XML 構造をクリアします。これは、アプリケーションのフォーカスをピッカーから外してから元に戻すことを意味します。MS InfoPath の技術的な制限により、最終的な目標を達成できないようです。それで、これが他の初心者に役立つことを願っています!

質問:親ノードで繰り返されるノードまたは要素の最初のインスタンスを選択する必要があります。(私の用語は間違っているかもしれません)。ここでスタックオーバーフローの他の投稿から式を適応させようとしましたが、役に立ちませんでした。

基本的な状況: MS InfoPath で個人/グループ ピッカーを使用しています。誰かがピッカー フィールドで複数のユーザーを選択した場合、最初に選択したユーザーにリセットしたいと思います。問題は、同様の 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>

次の式は、 DOMAIN\John.Green と DOMAIN\John.Smithの両方を返します...

/descendant::my:section1/my:group/pc:Person/pc:DisplayName[1]

閉じますが、葉巻はありません。

2 つの別々の式が必要です。1 つは DOMAIN\John.Green を選択し、もう 1 つは DOMAIN\John.Q.Public を選択します。

4

1 に答える 1

2

間違った場所で述語を使用しています。

あなたの表現、

/descendant::my:section1/my:group/pc:Person/pc:DisplayName[1]

pc:DisplayName対応する親(要素)の最初の要素である要素のセットを返すpc:PersonのでDOMAIN\John.GreenDOMAIN\john.smith

それは基本的にそれぞれそれぞれ最初のものですDisplayNamePersongroupsection1

必要なのは、それぞれの最初のものですこれDisplayNamePerson次のXPath式に変換されます。 groupsection1/descendant::my:section1/my:group/pc:Person[1]/pc:DisplayName

于 2012-09-25T16:50:59.763 に答える