共用方式為


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

當將 TypedXmlDocument 陳述到引擎時,會建立單獨的 TypedXmlDocuments 子文件;請參閱 Assert。 引擎會根據規則中定義的 XPath 選取器,決定要建立哪些子 TypedXmlDocuments。 當您在 Composer 中建置規則時,XPath 選取器值預設為 [事實總管] 中 [XML 架構] 索引標籤中選取之節點上方的節點。 XPath Field 值預設為選取的節點本身,相對於其父節點。

在某些情況下,您可能會想要自定義 Composer 在建置規則時所建立的預設 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 的總值。 您的規則如下所示。

IF 1==1

THEN /Order/Orderline/總計 = (/Order/Orderline/Hat/Cost + /Order/Orderline/Shirt/Cost)

XPaths 的粗體部分表示 Selector 部分,其餘部分代表 Field XPath。 這些是 Composer 所建置的預設值。 不過,執行此原則會導致建立 6 個物件:2 個 Orderline 物件、2 個 Hat 物件和 2 個 Shirt 物件。 Orderline 總計會針對 Hat 和 Shirt 物件的每個組合進行計算,而且總計一律會設定為相同的值,這是最後一次執行規則的結果。 規則會觸發 8 次。 這不是此情境的原意。

其中一個解決方案是編輯 XPath 值,如下所示。

IF 1==1

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

這三個字段的 Selector XPath 值都已設定為相同的 /Order/Orderline 值,而且已據此編輯 Field XPath 值。 這是藉由在 [XML 架構] 索引標籤中選取節點時,變更 [屬性] 視窗中的 [XPath 選取器] 和 [XPath 字段] 值來完成。這應該在將欄位拖曳至規則自變數之前完成。

根據這項變更執行政策,將根據每個 Orderline 內襯衫和帽子節點的成本值,正確計算每個 Orderline 的總值。