span8
span4
尽管XML在基于web和开放标准的数据中变得越来越常见,但对于更习惯于使用CAD或GIS数据的用户来说,它可能是一种痛苦。这是因为GIS数据基本上是平面的、表格的或关系型的,而XML是嵌套的或面向对象的。为了让FME用户能够将XML数据合并到他们的系统中,我们需要帮助他们克服这个挑战。这就是为什么在最近的几个版本中,我们一直努力使阅读XML变得更容易。
特性路径和扁平化是两个革命性的创新,可以帮助您将任何XML元素转换为FME特性。特性路径允许您通过定义XML结构(节点或元素)中希望切片或提取特性的点来查询XML。扁平化允许您将选定XML元素内的嵌套结构转换为parent.child形式的字段。可以记录父id,以便构建关联。因此,现在几乎可以读取任何XML,而不需要xfmaps或其他脚本。因此,我们现在建议将特性路径作为读取XML的主要方法,除非您有特殊需要使用XfMaps。
有关读取XML和GML的更多信息和选项,请参阅阅读XML / GML。
要读取XML,只需添加XML阅读器,将数据集路径指向源XML文件,然后单击阅读器参数。设置配置类型=“功能路径”
在“匹配元素”下,指定要将节点设置为特性类型,或者使用*将所有节点设置为特性类型(在大型或复杂数据集上使用时要小心!)
然后在展平选项下,确保启用了展平,并添加所有的祖先(父)属性。
单击OK, FME将扫描您的数据,并在特性路径中指定的节点上创建基于扁平化XML的特性类型。
注意,您不需要XML模式文档或XSD来读取XML。虽然我们可以使用它进行验证,并且它对于解释GML非常有用,但是对于任意XML,它通常没有足够的规范来定义精确的解释。
例如,考虑以下XML:
约翰 温哥华 11-22-99 12-11-09 -123.1,49.25 -122.9,49.15 6月 萨里 02-25-05 9-15-10 -122.8,49.12 -122.5,49.0
要读取这个XML,只需指定featurecall作为要匹配的节点。然而,这只会给我们一个大的记录,在它的一切,这将是相当困难的工作。最好是寻找与我们感兴趣的特征信息类型相对应的重复结构。所以我可能会选择“Contact”作为匹配的元素。
与扁平化匹配后,FME中的记录结构如下:
FeatureType:联系
用户属性:
名城市activeDate.fromactiveDate.toCoordinate_BOX.idCoordinate_BOX.coords.coord {}
如果您使用启用了Feature Path = Contact和flat的XML阅读器阅读本文,那么您将得到以下两个特性:
记录1:姓名=约翰城=温哥华活动从= 11-22-99activeDate.to= 12-11-09Coordinate_BOX.id= 101 Coordinate_BOX.coords。coord{0} = {-123.1,49.25} Coordinate_BOX.coords.coord{1} = {-122.9,49.15} record 2: name = Jane city = Surrey activeDate.from = 02-25-05activeDate.to= 9-15-10Coordinate_BOX.id= 102 Coordinate_BOX.coords。coord{0} = {-122.8,49.12} Coordinate_BOX.coords.coord{1} = {-122.5,49.0}
一旦将这些数据读入FME,就可以像处理其他数据集一样处理这些特性。通常,您将需要使用FME字符串和列表转换器解析或重命名属性,使用FME的几何转换器构建几何结构,并转换结构以适应目标模式的需要。
在附加的示例中,我使用list爆炸器来分解列表,AttributeSplitter将coord分解为coord0和coord1 (x,y),使用2DPointAdder从这些节点创建点,然后使用聚合器对这些点进行分组Coordinate_BOX.id。一旦我有了聚合点,那么BoundingBoxReplacer就可以构建box几何形状。此时,我就有了一个读取器,它可以处理任何符合上述示例XML结构的数据。
-扁平化建立父母。childAttrbite for everything below the query node.另外,当‘childAttribute’多次出现时,您将在FME childAttribute{0}、childAttribute{1}中得到一个列表构造。然后您可以决定在childAttribute级别而不是父级别匹配标记,或者您可以使用FME中的list爆炸器为每个列表元素创建单独的特性。如果这样做,请确保在高级设置中保留父id和父id。
-如果有几何属性,那么您将需要使用FME的几何构建器转换器来构建几何,例如2DPointAdder、PointConnector、AreaBuilder和GeometryReplacer。GeometryReplacer特别有用,因为它允许您直接从提取xml和gml时看到的那种大点列表中构建点、线或整个多边形—请参阅上面的构建几何图形。
-该过程不保留原始的XML结构。就其本质而言,“扁平化”意味着将结构强制转换为扁平关系或类似表的结构。这是不可逆的,因为原始结构没有存储在任何地方。如果希望读取XML并只更新几个字段,最好使用XMLUpdater或XQueryUpdater和XQuery命令。另一种方法是使用xfmaps来获取所需的字段值,使用XMLTemplates来重建结构,但这可能需要更多的工作。
字段名可能很长,这取决于您选择的查询节点。如果你有这样一个结构:
压扁在节点将给你的字段看起来像:
a_b_c_d_e = 1
a_b_c_d_f =一个
a_b_c_d_e = 2
a_b_c_d_f = b
而如果你在d处变平,你会得到:
d_e = 1
d_f =一个
d_e = 2
d_f = b
如果你选择node = e,你只会得到:
e = 1
e = 2
因此,选择足够高的查询节点以获得所需的数据,但要足够深以最小化字段长度。注意,您可以在稍后使用AttributeExpressionRemover删除长前缀。
©2019安全亚搏在线软件公司法律