你好,
我有以下部分的XML:
并编写xfMap脚本:
但我无法在字段元素中获取属性conditionName。
能帮我个忙吗?
谢谢
- …
497751 积极的 条件 干的 美国- 212 两个方向 四十五点零零五六 -102.8765 71.713年 泥浆孤峰 45.0231美元 -102.0451 112.715 南达科他73号信德 sd - 73 两个方向 45.0231美元 -102.0451 166.445美元 汇合我们212东信 45.0231美元 -102.1095 169.608 美国西212号交界处 - …
我需要从中得到两个特征,1为每个
xfmap-sd-iris.xml
我有一个已知的XML文件/提要结构,并使用xfmap文件映射属性。XML提要并不总是包含提要中的所有字段。是否有方法从xfmap文件填充reader属性?
目前我有一个XFMap文件来解析属性,但我正在考虑创建一个属性,该属性使用项目的原始XML编写为CLOB。在解析出所有其他属性时,是否有一种简单的方法将其添加到XFMAP中,以将其作为属性包含在其中?我试过映射match="。"映射匹配=“*.”,映射匹配="*"所有不正确的工作。
事先谢谢!
==特征映射来解析每一项==
== Feature-Content-Map(我要做的工作==)
spoormodel.zip@juanchuchow1323
希望你能帮我?
我创建了一个xmp文件,它将点聚合成折线,但不幸的是它不起作用。
我在尝试翻译的xml文件和创建的xmp文件中附加了一个zip文件。
我不知道出了什么事。
谢谢提前
许多用户在阅读复杂的xml或gml方面存在问题。方法是使用FME的XML阅读器,无论是用功能路径,它在给定节点上查询XML,具有扁平化选项,或者用一个xfMap这为查询XML和构建特性提供了广泛的选项。xfMaps的基本思想是在特性映射部分中指定要将xml结构中的哪个节点转换为特性类型。然后在“要素内容映射”部分指定每个要素包含的内容。
然而,有时这很困难,因为源xml可能没有任何模式。相反,在某些情况下,模式嵌入到数据本身中。
考虑以下xml:
约翰 温哥华 11-22-99 12-11-09
我们可以将Feature节点标识为我们想要捕获的元素作为我们的Feature类型。然而,简单地有一个属性称为属性不是很有用,因为我们可能会得到重复的列或列表,如:
财产1 =约翰财产2 =温哥华等等
更好的方法是从名称-值对动态构建模式,这样名称就变成了属性名,值就变成了属性值。我们可以使用以下“sequenced”xfmap来实现这一点:
'mapping match= ' property ' '只选择每个属性元素。“name extract@typename”创建一个属性,该属性的名称存储在属性标记内的@typename中,并指定与同一属性元素关联的值。
因此,对于
约翰
xfmap创建一个名为attribute1的字段,并在其中存储属性值John。
然后,XFMAP可以读取上述XML并从中生成以下功能:
activeDate_from = 11-22-99 activeDate_to = 12-11-09
如果你有可选的或者多个几何图形,然后您需要启用聚合。我将在稍后的另一个示例中解释如何做到这一点。
假设我们想阅读下面的源xml。上面的动态模式方法允许我们读取下面的所有属性
-123.1,49.25 - -122.9,49.15 约翰 温哥华 11-22-99 12-11-09 -122.8,49.12 - -122.5,49.0 6月 萨里 02-25-05 9-15-10
如何添加几何?在我见过的大多数动态模式案例中,几何本身并不是完全动态的。对于这种类型的xml,通常有一组已知的几何图形。每个特征可能包含,也可能不包含,但是必须有一些预定义的方法来存储几何图形,否则,它将是太困难的工作。当然,如果每个特性只是在属性中嵌入了坐标值,FME总是可以使用2dpointreplacer将这些转换为工作台内的点。
对于这个例子,我们只有一个与基本例子相似的边界框。注意,我们不需要定义异常,因为第一个映射匹配只与属性匹配,而不与Coordinate_BOX匹配,所以我们要做的就是在Coordinate_BOX上显式匹配,然后像在“基本”示例中那样构建几何图形:
在我们结束之前,添加一些几何特征如何?从上面的源数据可以看出,几何图形具有唯一的标识符:
当每个特性有多个几何形状,并且需要能够像GML 3.2.1中那样分别标识它们时,保存这些几何形状就变得尤为重要。
我们可以使用到feature map的引用映射来获取这个值,如下所示:
这只是告诉FME创建一个名为identifier的引用,并在读取器在遍历源xml时遇到标识符时在其中存储标识符的值。然后,每当我们想要检索标识符的值时,我们将存储最后一个(LIFO)。这允许子元素在扫描父元素时检索值集。
那么,我们可以修改几何部分,包括如下特征:
而不是定义一个属性,我们定义一个特征,而不是提取表达式,我们使用refexpr或引用表达式检索前面在引用创建中设置的值。注意,我们可以定义一个新的reference map部分,而不是将它放在feature map中,但是,只有当我们希望能够从非特征元素或其中的元素捕获标识符时,才需要这样做。
把它们放在一起,现在我们有了一个xfmap,它将创建一个新的特性类型
http://www.w3.org/1999/xlink" >
在FeaturePath中使用XML阅读器有一些限制。尤其是当XML模式允许可选数据时,featurepath只会生成xml数据中标记所在的属性(它根本不知道模式)。这意味着您的工作区可能无法正常工作,当您获得包含其他可选数据的下一次交付时。第二个恼人的问题是,不能影响对特定属性使用列表还是使用单个属性的决策。因此,我经常遇到这样的问题:在一个工作区中,要处理与list-attribute相同的数据,而与非list-attribute相同的数据。有足够的理由寻找另一个解决方案——> xfmap。
通过文档和一些简单的教程,我完成了我的第一步。大多数事情都很好,但我不知道如何管理嵌套的列表,如以下代码:
1001 2 K R 年代 ZES 1001 D Pkt 1001 UTM 527138.862 五百七十三万六千五百三十八点八八四 One hundred. 1001 B Pkt 1001 UTM 527138.708 5736538.718 98 年代 1001 B 基米-雷克南 1001年1 UTM 527138.208 5736538.718 1001 2 UTM 527138.708 5736538.718 1001年3 UTM 527138.208 5736538.718
我的目标是在特性KG中生成一个类似GO(). gp (). gp001的数组。有人用xfmap解决过类似的问题吗?提前表示感谢。
这是一种从标记匹配项下递归提取所有属性的技术。这个小技巧可以让任何FME用户快速读取几乎任何XML数据集,所以它非常强大。它还可以与XML几何阅读方法结合使用。
说明许多用户在阅读复杂的xml或gml方面存在问题。实现这一点的方法是使用FME的通用XML阅读器。这可以通过特性路径来实现。然而xfmaps是xml整合脚本,它为您提供了充分的灵活性,可以按照您希望的方式读取xml,包括几何整合,这是特性路径还不支持的。其基本思想是,在“功能映射”部分中指定要构成功能类型的XML结构中的哪个节点。然后在feature content map部分中指定每个特性包含什么。XfMap结构命令这可能会花费一些时间来列出你所有的属性,这是一种递归提取标签匹配下面所有属性的技术。这个小技巧可以让任何FME用户读取几乎任何XML数据集,所以它非常强大。'mapping match= ' ' Feature/* ' '表示映射父节点为' Feature/* '的所有子节点 : attribute1 = Johnattribute2 = VancouveractiveDate_from = 11-22-99activeDate_to = 12-11-09 注意事项唯一需要注意的是,它为匹配的标记下的所有内容构建父级childattrbite的属性名。同时,在“childAttribute”多次出现的地方,你在FME childAttribute{0}中得到一个列表结构,子属性1。然后您可以决定在childAttribute级别而不是父级匹配标记,或者您可以在FME中使用list爆炸性工具为每个列表元素创建单独的特性。 源XML的例子假设我们想阅读下面的源xml。上面的结构命令允许我们读取下面的所有属性
向结构XFMaps中添加几何图形诀窍是定义一个异常,这样我们就不会尝试将几何字段“坐标箱”自动渲染为属性。我们通过将映射表达式限定为:
|
在FME中,现在可以使用更简单的方法读取XML。看到的文章:
许多用户在阅读复杂的xml或gml方面存在问题。实现这一点的方法是使用FME的通用XML阅读器。但是要做到这一点,您需要创建一个xfmap。其基本思想是,在“功能映射”部分中指定要构成功能类型的XML结构中的哪个节点。然后在feature content map部分中指定每个特性包含什么。下面是一个帮助您入门的非常基本的示例。然后您可以添加到其中,并使其像您以后想要的那样复杂。
假设我们想阅读下面的源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
如您所见,这是一个嵌套结构。所以我们要做的第一件事就是决定在FME中哪个节点表示我们的特征类型。我们可以选择FeatureCollection,但是我们会有一个巨大的记录。或者我们可以选择activeDate作为我们的特性类型,但是这样我们就会丢失很多其他信息。因此,在这种情况下,使特征类型最好的位置可能是在节点处
在Xfmaps中,我们使用特性映射来定义我们的特性类型。在这种情况下,它看起来像:
这告诉FME在读取“feature”元素时构造一个feature。请注意,我们还没有定义任何内容,因此这只是一个容器,我们稍后将填充它。
因此,让我们为新特性类型定义一些内容。这里的诀窍是,我们可以根据需要读取任意多的或少的xml。唯一的限制是xfmap只处理一次匹配,所以只使用第一个匹配。让我们从一些简单的事情开始。
映射match ="attribute1"告诉我们要在哪个节点上进行匹配。
要实际读取这些数据,您需要将源文件粘贴到source.xml文件中,或从本页底部下载。然后您可以将其拖放到Workbench中,选择通用XML阅读器,然后点击参数按钮,为配置类型选择xfmap,然后浏览到xfmap文件。如果您的xfmap配置正确,您应该得到一个名为Field的新特性类型,其中一个字段名为attr1。注意,它没有几何图形,因此要查看内容,您可以连接到可视化器,运行它,然后在查看器中选择“不查看几何图形”。祝贺你,您刚刚创建了第一个xfmap来解析xml源文件。
添加更多字段如何?好吧,我们可以为每个字段有单独的映射,但是在一个映射表达式中列出我们想要的所有字段更容易。替换上一个
这将为attribute1和attribute2创建字段。local-name将保持名称与匹配的标记相同,“。”将提取匹配的值。这样设置比较短,但不允许重命名字段。
嵌套日期结构呢?这通常会使传统的关系或简单特性类型的xml或gml阅读器感到痛苦。通常这些字段根本不需要读取,被解读为某种列表结构,或者以xml blob的形式输入。
要读取日期字段,我们可以做到以下几点:
因为我们匹配的是activeDate,在匹配发生时,这将成为我们在XML文档中的相对位置。我们可以创建一个日期字段并给它赋值“”,但是这样我们就有了一个包含xml的字段。更好的选择是深入对象结构并创建两个新字段,一个用于date_start,一个用于date_end。为此,我们使用一个提取表达式“./from”“./to”,它告诉FME从“from”和“to”属性中提取值,分别。
记住,如果你把activeDate和attribute1 2一起列出来,然后,该匹配表达式将捕获带有嵌套XML内容的activedate as字段,第二个activedate匹配表达式将被忽略。
xfmaps的一个限制是错误报告并不总是非常描述性的,通常只会告诉你xfmap的第一个问题,因此,您需要从simple开始,逐步学习xfmap语法的输入和输出。
最后但并非最不重要的,让我们在特性中添加一些几何图形。为此,我们需要在特性中找到定义几何图形的元素,然后需要选择适当的xfmap对象类型来解释几何图形。让我们匹配坐标箱,并使用它创建一个XML框。
因此,我们在feature content map中像往常一样创建一个映射匹配。但是,这次我们使用geometry_activate命令告诉FME我们要创建一个XML框几何体。还有xml点,xml-line,xml区域和我们可以使用的许多其他几何类型。这些都在读者和作者手册的xml-xfmaps部分中定义。
记住,每次向xfmap添加内容时,都需要重新导入数据集,或者至少删除并重新添加特性类型,以便读取新的模式信息(属性或几何定义)。如果您的工作区不知道您的模式更改,然后,即使您已经将它们添加到xfmap中,它也会忽略它们。
最后,让我们在几何图形中添加一些特征。特征是与特征上的各个几何图形相关联的标记或属性。当我们有多个几何图形与一个特性相关联时,这些就变得尤为重要。通常需要定义几何id,如gml_id。
要添加特征,我们使用
…
@符号告诉FME从
我们的“基本”例子到此结束。我还会添加一些快捷方式和其他几何图形的例子,但是希望这将帮助您开始阅读xml,无论xml的源或结构是什么。
把它们放在一起,下面是完整的xfmap文件,它从源xml读取所有数据:
当我们读取“feature”元素时,构造一个FME特性。
这篇文章在我们有XML读取器的功能路径选项。在深入研究xfMaps之前,值得注意的是,在大多数情况下,您不再需要创建XFmap来读取XML。在这种情况下,您最好只使用配置为type=“feature path”且启用扁平化的XML阅读器,而feature path=“case”。结果将是相同的,您不需要创建任何脚本,比如这个XfMap。使用xfMap的唯一原因是,如果您想要一些XML阅读器的高级特性路径设置(例如复杂几何处理或动态模式)。不过,我们将把本文暂时放在这里,以供那些希望使用另一个示例帮助他们学习Xfmap的人参考。
L型线环领结 线性(0 0,100 100,100 0,0 100,0 0)假 … L -绳结领结 LINESTRING(0 0,100 100,100 0,0 100,0 0)真正的
天真的,最初的出发点是看看我们的FME中的XML(泛型)阅读器能否接受这一点,无需任何调整或配置。所以我们启动workbench并尝试添加一个XML (Generic)格式的源数据集,没有指定xfMap或其他设置。
没有去。
我们需要做一个xfMap。
从来没有这样做过,并且由于它的存在而无法接触到任何在安全领域的知情者亚搏在线圣诞节前夜,我们卷起袖子,敞开心扉的文档。在XML阅读器部分有一个很大的子部分,在xfMap上有很多主题,其中有一些例子。(You have to click the "show" button once you get in that documentation in order to see the subsections and visit through them.) But there wasn't a particularly simple example to work through or look at.所以写这篇文章的想法就产生了,如果(剧透提示:和什么时候)成功了。
为了进一步发展游戏,访问fme_home/xfmap目录是正确的。没有什么比一个好的例子更能让你埋头苦干了。在这个目录中有很多非常复杂的例子。记住gpx是一种相对简单的格式,首先查看xfMap。我们在这里需要的东西也更加复杂,但是有了医生,可以取得一些进展。
然后我们再去工作台,试图添加XML泛型的源数据集,这次将设置框指向我们刚刚创建的xfMap文件(并保存为jts_test .xmp)。
没有去。
它找不到xfMap.dtd,所以与其想清楚,我们决定把xfmap和它的兄弟(以及xfmap.dtd)放在fme_home/xfmap目录中。然后我们再次尝试添加源数据集,指向新迁移的xfMap。
宾果。
属性类型来自FME_HOME/metafile/xml_common_attr_map.fmi所允许的词汇表。xml_buffer表示任意一长串东西,在本例中是文本。
再一次,我们回到工作台添加源数据集,指向新修订的XFMAP。
现在我们说的…
这一次,我们的图式刚刚通过。所以我们在新读取的源特性类型定义之后,然后点击运行按钮。
哎呀。没有正在读取的数据。为什么不呢?好吧,我们还没有指定如何将数据从case xml对象移动到fme特性中。
这就是xfMap的作用所在。
我们需要构建功能图。现在,这是一个非常简单的情况,因为我们实际上只有一种我们将要阅读的特性(在很多情况下,生活不会如此简单)。感恩,我们深入研究并发现,您可以在xfMap中指定一些只做所需的事情。
(注意,我们甚至添加了一个注释,就像那些很酷的XML家伙所做的那样:)
我们保存它并再次运行工作区,现在我们将功能取出并记录下来。哇!
L型线环领结 线性(0 0,100 100,100 0,0 100,0 0)假
注意 测试/ op在 提取表达式--这抓住了 假出去了。
这是圣诞节的前夜,最后一步是用一种自定义格式“包装”所有这些内容,使其使用起来最方便。它很好地将xfMap与格式打包在一起,这样最终用户在读取格式时就不必选择xfMap。
至于具体的操作细节,留给那些已经读到这里的读者去练习。
请注意:
在FME中,现在可以使用更简单的方法读取XML。看到的文章:
FME XML阅读器读取输入文档并根据指令进行处理,称为映射规则,可以在名为xfMap文档的文件中指定。xfmap既可以由用户定义,也可以由读卡器使用XML读卡器自动生成。功能路径参数,它不需要来自用户的脚本。
基本问题是XML文档通常是嵌套的或面向对象的结构,而GIS格式和工具(如FME)通常是面向平面或关系结构的。因此,读取典型的xml文件并不像将FME指向xsd那么简单。您需要定义如何解释xml。明确地,您需要准确地定义什么节点级别成为一种特性类型,以及该节点下的哪些元素将成为该特性类型的字段或几何图形。在FME中,xfMaps是实现从xml到FME的特性映射的一种方法。在FME中看到的许多自定义GML/XML格式的读取大多是使用XFMAP完成的。
然而,在继续学习xfmaps之前,建议您探索XML读取器的新功能路径功能,这更容易使用。
注:xfmaps用于读取数据,不写,因为它是一种xml到FME特性映射的一种方式。在FME中看到的自定义GML/XML格式的编写主要是通过XMLTemplater变压器。
用户可以创建自己的xfmap——如果可以的话,可以通过“Settings…”按钮指定xfmap来与“XML”阅读器一起使用。xfmap通常有两个主要部分,特征图和特征内容图。要素地图定义要提取的要素类型,要素内容地图定义要包含这些要素的属性和几何图形。匹配的表达式驱动这些映射。匹配表达式定义要读取的xml节点。任何不匹配的都将被忽略。使用xfmaps,您还可以从给定的xml源中提取任意多的或少的内容。如果没有匹配,它将跳过该元素。唯一的限制是只能匹配一个节点一次。如果你需要映射match = "LineString"表达式,只有第一个会被使用。这就是为什么有必要定义异常,特别是对于使用通配符的匹配表达式。
的FME的读者和作者文档,有一节是关于xfMap语法和使用的。
在FME2011,我们添加了一个XML阅读器设置称为特性路径您可以在其中输入节点查询信息,以便将输入的XML文档“分割”为更易于管理的部分,还可以选择平铺嵌套属性,使其更易于使用。
有一点XfMap教程/案例研究 这将遍历创建一个简单的xfMap来解析一个相对简单的XML文件(然后将整个文件包装成一种定制的格式,以便使用)。
下面是另一个简单的例子,可以帮助您入门xfmap_示例\u基本。后者包括几何和几何特征定义以及属性。
这个例子叫做xfmap_示例\u展平 使用与XFMap_Example_Basic相同的源数据,但使用名为结构命令的快捷方式来自动平铺
然后是
xfmap_示例\u动态 它将向您展示如何读取没有预定义模式,而是将模式嵌入到xml数据本身中的xml。