第8页
第4排
尽管基于Web和开放标准的数据越来越普遍使用XML,对于更常用于处理CAD或GIS数据的用户来说,这可能是一种痛苦。这是因为地理信息系统的数据基本上是平的,表格式或关系式,而XML是嵌套的或面向对象的。为了让FME用户能够将XML数据合并到他们的系统中,我们需要帮助他们克服这一挑战。这就是为什么在最近的几个版本中,我们已经努力使阅读XML变得更加容易。
特征路径和扁平化是两个革命性的创新,它们将帮助您将任何XML元素转换为FME特征。功能路径允许您通过在XML结构(节点或元素)中定义要切片或提取功能的点来查询XML。扁平化允许您将所选XML元素中的嵌套结构转换为parent.child形式的字段。可以记录父ID,以便建立关联。因此,现在几乎可以读取任何XML,而不需要XFmap或其他脚本。因此,我们现在建议将特性路径作为读取XML的主要方法,除非您有使用XFMAP的特定需求。
有关读取XML和GML的更多信息和选项,请参阅读取XML/GML.
要读取XML,只需添加XML阅读器,将数据集路径指向源XML文件,然后单击读卡器参数。set configuration type=“功能路径”
在“要匹配的元素”下,指定要构成要素类型的节点,或者使用*将所有节点转换为功能类型(在大型或复杂的数据集中使用时要小心!).
然后在“展平选项”下,确保启用展平,并添加所有祖先(父)属性。
单击“确定”,FME将扫描您的数据,并根据您的XML在功能路径中指定的节点上的展开创建功能类型。
注意,您不需要XML模式文档或XSD来读取XML。虽然我们可以用它进行验证,这对解释GML很有用,对于任意XML,它通常没有足够的说明性来定义精确的解释。
例如,考虑以下XML:
约翰 温哥华 1999年11月22日 2009年11月12日 -123.1、49.25页 -122.9、49.15页 六月 萨里 2005年2月25日 2010年9月15日 -122.8、49.12条 -122.5、49.0
要读取此XML,我们可以将FeatureCollection指定为要匹配的节点。然而,这只会给我们一个大记录,里面的每一件事都很难处理。最好寻找与我们感兴趣的特征信息类型相对应的重复结构。所以我可能会选择“contact”作为要匹配的元素。
与启用展平的接触匹配在FME中生成以下记录结构:
特征类型:联系人
用户属性:
名称城市激活日期从激活日期至 坐标箱ID坐标
如果您使用启用了feature path=contact和flatting的XML读卡器读取此消息,然后您将获得以下两个功能:
记录1:name=john city=couver activedate.from=11-22-99激活日期至=12-11-09年坐标箱ID=101坐标0-123.1,49.25坐标-122.9,49.15记录2:name=Jane City=Surry Activedate.From=02-25-05激活日期至=9-15-10坐标箱ID=102坐标框.坐标0=-122.8,49.12坐标框.坐标1=-122.5,49.0
一旦将这些数据读取到FME中,然后,您可以像处理任何其他数据集一样处理这些特性。通常,您需要使用fme字符串和list transformers解析或重命名属性,用FME的几何变换器构建几何图形,并转换结构以适应目标模式的需要。
在所附的示例中,我使用ListExploder分解列表,attributesplites将coord分为coord0和coord1,分别用于x、y和一个2dpointadder来创建这些点,然后是一个聚合器,用于按坐标箱ID.一旦我有了聚合点,然后边界框替换器可以构建框几何体。在这一点上,我有一个阅读器,它可以处理任何符合上面的示例XML结构的数据。
-扁平化为查询节点下的所有内容生成parent.childattrbite。也,如果“childattribute”多次出现,在fme childattribute 0中得到一个列表结构,子属性1。然后您可以决定在childattribute级别而不是父级别匹配标记,或者您可以在FME中使用ListExploder为每个列表元素创建单独的特性。如果这样做,请确保在高级设置中保留父ID和父ID。
-如果存在几何属性,然后,您需要使用fme的geometry builder transformers构建几何体,如2dpointadder,点连接器,区域生成器,和几何置换器。GeometryReplacer特别有用,因为它允许您直接从提取XML和GML时看到的大型点列表中构建点线或整个多边形-请参见上面的“构建几何体”。
-此过程不保留原始XML结构。从本质上讲,“扁平化”意味着您将结构强制为平面关系或类似表的结构。这是不可逆的,因为原始结构不存储在任何地方。如果要读取XML并只更新几个字段,对于XQuery命令,最好使用xmlupdater或xqueryupdater。另一种方法是使用xfmaps获取所需的字段值,使用xmltemplates重建结构,但这可能需要更多的工作。
字段名可能会变长,取决于您选择的查询节点。如果您的结构如下:
节点处展平将为您提供如下字段:
A欷B欷C欷D欷E=1
A B C D F=A
A欷B欷C欷D欷E=2
A?B?C?D?F=B
然而,如果你在d时变平,你会得到:
D_e=1
D_f=A
D_e=2个
D_f=B
如果选择node=e,则只会得到:
E=1
E=2
所以选择足够高的查询节点来获取所需的数据,但要足够深,以使你的场长度最小化。注意,以后可以使用attributeExpressionRemover删除长前缀。
?2019安全亚搏在线软件公司|法律