Scriptella:如何在通过Xpath从XML获取数据时处理错误

时间:2013-04-02 08:09:04

标签: xpath etl scriptella

我有一个关于从XML xpath获取数据的查询。

 <query connection-id="in">
    CommunicationCenter/Response/MenuData/Menu/Noun
<!--something I have to do inside script using the data fetched from xpath-->
</query>

我的问题是 - 假设有一个XML没有这种Xpath结构。它有“OtherCommCenter / MenuData / Menu / Noun”或其他结构。然后,当我运行该作业时,它表示作业执行时没有异常&amp;因为它没有从xpath获得任何值,所以没有发生任何事情。意味着它返回null。所以,我如何在那里发现错误?我必须知道xpath中的哪个元素会产生问题,或者如果不可能,至少哪个xml在结构中创建了这个错误?

因为在我的项目中,我必须处理多个XML并且我正在通过向How to ETL multiple files using Scriptella?中描述的提交作业向ExecutorService 进行操作

P.S。对于最后一部分,我这样做

<connection id="in" driver="xpath" url="$input"/>

其中“input”是不同xml文件名的映射键。

任何人都可以帮助我吗?有必要尽快了解我的项目。

1 个答案:

答案 0 :(得分:1)

这是一个人为的例子。假设有一种XML - 人和汽车。

people.xml:

<people>
    <person></person>
</people>

Cars.xml:

<cars>
    <car/>
</car>

以下xml为/ people / person和/ cars / car运行2个查询,如果找到至少一条记录则设置全局标志:

<etl>
    <connection driver="jexl" id="jexl"/>
    <connection driver="xpath" id="xpath" url="input.xml"/>
    <connection id="log" driver="text"/>

    <query connection-id="xpath">
        /people/person
        <script connection-id="jexl">
            # set flag to true if at least one element was found
            etl.globals['people']=true;
        </script>
    </query>
    <script connection-id="log" if="!etl.globals['people']">
        WARNING: No people found in the XML file
    </script>

    <query connection-id="xpath">
        /cars/car
        <script connection-id="jexl">
            etl.globals['cars']=true;
        </script>
    </query>

    <script connection-id="log" if="!etl.globals['cars']">
        WARNING: No cars found in the XML file
    </script>
</etl>