共用方式為


如何編輯 XPath 選取器以處理多個記錄

當 TypedXmlDocument 判斷提示至引擎時,會建立個別的子 TypedXmlDocuments;請參閱 判斷提示。 此引擎根據規則中所定義的 XPath 選取器以決定建立哪個子 TypedXmlDocuments。 當您在編輯器中建置規則時,XPath 選取器的值預設為在 [事實總管] 的 [XML 結構描述] 索引標籤中選取的節點上方的節點。 XPath 欄位的值預設為選取的節點本身,相對於其父節點而言。

在某些情況下,您可能要自訂建置規則時編輯器所建立的預設 XPath。 假設下列範例 XML 文件。

<Order>  
   <Orderline>  
      <Hat style="Baseball">                        
         <Cost>10</Cost>  
      </Hat>  
      <Shirt color="Black">  
         <Cost>20</Cost>  
      </Shirt>  
      <Total></Total>  
   </Orderline>  
   <Orderline>  
      <Hat style="Bowler">                        
         <Cost>20</Cost>  
      </Hat>  
      <Shirt color="Red">  
         <Cost>20</Cost>  
      </Shirt>  
      <Total></Total>  
   </Orderline>  
</Order>  

假設您要建置計算每個 Orderline 的 Total 值的規則。 您的規則看起來將如下所示。

IF 1==1

THEN /Order/Orderline/Total = (/Order/Orderline/Hat/Cost + /Order /Orderline/Shirt/Cost)

XPath 的粗體字部分表示 [選取器] 部分,其餘則代表 [欄位] XPath。 這些是由編輯器建置的預設。 不過,執行此原則會導致建立 6 個物件:2 個 Orderline 物件、2 個 Hat 物件和 2 個 Shirt 物件。 會為 Hat 與 Shirt 物件的每個組合計算 Orderline 總計,而且總計永遠會設為相同值,該值為上次執行規則的結果。 此規則會引發 8 次。 這並非此實例的目的。

一個解決方式是依照下列內容編輯 XPath 值。

IF 1==1

THEN /Order/Orderline/Total = (/Order/Orderline/Hat/Cost + /Order/Orderline/Shirt/Cost)

三個欄位的選取器 XPath 值已經全部設定為相同的 /Order/Orderline 值,而欄位 XPath 值也已經分別編輯。 這是藉由在 [XML 架構] 索引標籤中選取節點時,變更屬性視窗中的 XPath 選取器和 XPath 欄位值來完成。這應該在將欄位拖曳到規則引數之前完成。

利用此變更來執行原則,將使得每個 Orderline 的 [總計] 值可依據該 Orderline 中 Shirt 與 Hat 節點的 [成本] 值正確計算。