我有一个关于从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文件名的映射键。
任何人都可以帮助我吗?有必要尽快了解我的项目。
答案 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>