在 Talend Open Studio 中使用XPath Loop

       一般人会按照自上而下的逻辑模式来考虑分析处理 XML 文档。比如,使用 <library><books><book> 结构,表示"到一个图书馆中,取出所有的书。然而,如果按照从最内部、核心的要素开始自内向外考虑问题,或许会更容易:“给我所有的书和它们所在的图书馆”。

      Talend Open Studio 采用 tFileInputXML 组件来读取作业中的 XML 文档。TFileInputXML 采用 Loop XPath (循环的 XML 路径)定义一个在文档中循环反复的查询结构,基于这种结构运行一系列的 XPath 映射查询。在处理进行的过程中,数据的 schema 的每个字段上都设置了一个 XPath 映射查询。

自下而上的处理模式

      当使用如同 filesystem 那样的分层结构时,一般人会从最高层次开始,向较低层次的元素纵深。然而,在 Talend Open Studio 的 XPath 处理方式中,最重要的方法就是从足以定义一条记录的最低层次的元素颗粒开始执行。比如下面的 XML 文档中,在一个 Location (位置)元素内有多个 ID 子元素,它们包含在 IDs 元素中。
<Locations>
<IDs>
<ID sequenceName="Name">ABCDE</ID>
<ID sequenceName = "Site"/>
<ID sequenceName ="Bin">XYZ</ID>
</IDs>
</Locations>

处理这个XML文档的第一步是确定是否每个 ID 都是一条记录 (这种情况下 tFileInputXML 将会生成三行数据)或者是否那个 IDs 元素定义了一条记录(这种情况下只生成一行数据)。

     从尽可能低的层次开始处理,Talend 作业会为每个 ID 元素生成三对 name/value 数据。此时 loop 循环的设置是 Locations/IDs/ID.  @sequenceName 会返回 sequenceName 的属性(attribute)价值。句点(".")会返回对应 ID 元素中的文本。该句点象征 loop 循环中一个 ID 定义的对应的元素。

在 Talend Open Studio 中使用XPath Loop_第1张图片

                                                                每个 ID 定义一条记录

     另一种处理这个 Locations 文档的方法是将 loop 循环的元素设为 Locations/IDs。在上面的例子中,只会生成唯一的一条记录。会有一些 attribute selectors([@sequenceName=""]),即属性选择器将每个 ID 元素映射给不同的字段。

在 Talend Open Studio 中使用XPath Loop_第2张图片

                                                        包含子元素的 IDs 元素定义一条记录

     再有一些情况,父元素可能包含了子元素需要的额外信息。这种额外信息可能发挥识别或者提供上下文的作用假设 "Locations" 使用 "IDs" 元素来补充信息。为了把一条 ID 记录与它的 IDs 父元素联合在一起,您可以提供一个到这个父元素的相对的参照路径("../@Name"),这可以为每条 ID 记录重复一次 IDs 字段。

     当查看等级结构时,从上到下的思考方式是很自然的。但是,对于 XML 处理器来说,自下而上的思考方式对识别出正确的循环结构而言,或许是大有助益的。父元素——以及其它的更高级别元素——不会因为是自下而上的处理方式而被忽视。使用相对的路径(../)就可以访问父元素及其属性(attribute)。

 

译自 http://bekwam.blogspot.com/2011/07/xpath-loops-in-talend-open-studio.html?spref=tw

你可能感兴趣的:(xml,查询,xpath,open,loop,Studio,Talend)