使用规则在datamapper中进行Xpath调节

时间:2015-08-10 09:52:03

标签: xpath mule datamapper rule

如果使用datamapper评估以下XML,只将偶数编号的id映射到输出,那么使用xpath(Rule)的条件是:?

 <employees>
        <employee>
            <id>1</id>
            <name>aaa</name>
        </employee>
        <employee>
            <id>2</id>
            <name>bbb</name>
        </employee>
        <employee>
            <id>3</id>
            <name>ccc</name>
        </employee>
        <employee>
            <id>4</id>
            <name>ddd</name>
        </employee>
    </employees>

我尝试使用 / employee [id mod 2 = 0] / id 。如果输入只有一个偶数,则映射;如果input.xml中有多个偶数编号的id,则会失败。     错误是

  

xpath填充字段的结果&#39; id&#39;包含两个或更多值!

2 个答案:

答案 0 :(得分:1)

规则独立于DM中配置的每个元素映射。将在要使用的元素映射配置中创建规则。

对于提供的示例xml,应在Foreach 'employee' -> 'employee'元素映射中创建此规则。

尝试使用此规则配置 Name : {Rule Name} Type : Boolean Context : /employees/employee Xpath : /matches(string(id mod 2), '0')

如果id为偶数,则会创建一个返回true的规则,如果id为odd,则返回false。

在DM脚本视图中使用if块并检查规则的值。如果规则值为true,则只映射id。

答案 1 :(得分:0)

It also worked in this way                                                                          
    Name : {Rule Name}
    Type : String
    Context : /employees/employee
    Xpath : /id mod 2 = 0 
and used the if condition as below : 
if(input.Ruleid.equals("true")){
    output.id = input.id;
    output.name = input.name;
} 

如果不使用if条件,还有其他方法吗?