检查input(property/token(filter1/filter)/value)以逻辑表达式开头的正常过滤语句,
第一步是检查表达式验证器,如果产品包含任何位置(TOKYO/AGEO/FACTORY_A/FACTORY_B 等...),那么我们应该采取下一步将表达式转换为预期输出中提到的混合过滤器语句。
基本上,如果产品包含上述任何位置,产品将更改为预期输出中提到的位置。
更多的逻辑表达式也将在混合过滤语句中发生变化,因为它在顶层以 AND 运算符开始,内部 OR 操作是分叉的,请仔细查看预期输出中的混合语句。正常的过滤器语句在顶层以 OR 表达式开始,内部以 AND 表达式提到的输入分叉。
我不知道如何进行xsl转换,我不知道如何处理逻辑表达式。需要帮助。
我知道这不是直截了当的,如果您需要任何进一步的解释,请告诉我。
输入
<Metadata id="WTPart_1398662" source="wt.part.WTPart|com.ptc.PHBase|com.ptc.PHModel">
<Property token="filter1">
<Value>
(OR
(AND (PRODUCT 'TOKYO') (DATE_RANGE '' '2022-03-31 00:00:00.0’))
(AND (PRODUCT 'PH_U-HD2'))
(AND (PRODUCT 'PH_U-HD’))
(AND (PRODUCT 'AGEO') (DATE_RANGE '' '2022-01-31 00:00:00.0’))
)
</Value>
</Property>
<Property token="filter2">
<Value>
(OR
(AND (PRODUCT 'FACTORY_A') (DATE_RANGE '' '2023-01-31 00:00:00.0'))
(AND (PRODUCT 'FACTORY_B') (DATE_RANGE '' '2023-02-28 00:00:00.0'))
(AND (PRODUCT 'PRODUCT_A'))
(AND (PRODUCT 'PRODUCT_B'))
)
</Value>
</Property>
</Metadata>
预期产出
<Metadata id="WTPart_1398662" source="wt.part.WTPart|com.ptc.PHBase|com.ptc.PHModel">
<Property token="filter1">
<Value>
(AND
(OR (PRODUCT 'PH_U-HD')(PRODUCT 'PH_U-HD2’))
(OR
(AND (IS 'LOCATION' 'Ageo')(DATE_RANGE '' '2022-01-31 00:00:00.0’))
(AND (IS 'LOCATION' 'Tokyo')(DATE_RANGE '' '2022-03-31 00:00:00.0’))
))
</Value>
</Property>
<Property token="filter2">
<Value>
(AND
(OR
(PRODUCT 'PRODUCT_A')PRODUCT 'PRODUCT_B'))
(OR
(AND (IS 'LOCATION' 'FACTORY_A') (DATE_RANGE '' '2023-01-31 00:00:00.0'))
(AND (IS 'LOCATION' 'FACTORY_B') (DATE_RANGE '' '2023-02-28 00:00:00.0'))
))
</Value>
</Property>
</Metadata>