當將 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 的總值。