如何編輯 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 節點的 [成本] 值正確計算。