span8
span4
sampleworkspace.zip
XMLFragmenter_example.fmw
问题:如何从KML
我可以在谷歌Earth中的描述气球中看到属性。但是,如果我试图使用KML阅读器或数据检查器读取文件,则无法查看用户属性。
什么我需要做的加载属性到另一个文件类型,如shape文件(SHP)?
答:我们需要使用XQueryExtractor从KML文件中获取表属性。
1.让我们看看关于谷歌地球的源数据。它显示了一个带有属性的表。
来源KML在谷歌地球浏览
打开KML文件的文本编辑,你可以看到这个属性表被嵌入标签,它是用HTML编写的。
2.在您的工作空间FME,加HTMLToXHTMLConverter转换HTML到XHTML。这确保了标签包含一个有效的XHTML和元素都正确嵌套。
HTMLToXHTMLConverter参数
3.添加XQueryExtractor。输入以下XQuery表达式到
声明默认元素名称空间“http://www.w3.org/1999/xhtml”;for $x in /html/body/table/tr/td/table/tr返回fme:set-attribute($x/td[1]/text(),$x/td[2]/text())
如果您正在寻找关于XQuery的教程,请访问W3Schools的。
XQueryExtractor参数
4.连接到数据检查器。
FME工亚搏在线作流
5.查看在数据检查功能。
结果:属性名称和属性值的检查曝光。
6.公开的属性。如果希望稍后在工作流中使用属性或将它们写入目标数据集,则可能需要公开它们。亚搏在线这可以通过在XMLXQueryExtractor之后使用attribute解释器转换器,或者使用XMLXQueryExtractor中的Expose属性参数来完成。
除了使用XQueryExtractor变压器,它可能是更容易使用的XMLFragmenter。这里显示的步骤可以HTMLToXHTMLConverter变压器后使用。的工作区XMLFragmeneter_example.fmw示出了下面的方法。
一。将计数器附加到HTMLToXHTMLConverter传递端口。
2.在计数器上附加一个XMLFragmenter。参数如下:
XML属性:kml_description
元素,以配合HTML /体/表/ TR
从输入特性合并属性:是的
压平选项>启用压平。
3.附加一个attributeexpler,并公开下面的属性-td.table.tr{}.td {}
四。将列表属性设置为td.table.tr{}
5. AttributeCreator添加到ListExploder元素端口。设置如下:
6.现在我们有了属性名和相应的值,我们现在可以再次构建特性了。添加一个聚合器与以下参数:
组方:_count
累加模式:合并传入属性
7.从这里你应该有它的对应的属性和值的功能。然后,您可以添加一个AttributeExposer暴露所需的属性,并继续与你的工作流程。亚搏在线
多达10个附件(包括图像)可以具有最大的每4.0 MB总4.0 MB被使用。
由于这是很好的例子!然而,并非所有的* KML是这么好听的结构是这样的。在我的例子中<说明>表似乎仅具有一个排
的传感器强>:ALOS
的模式强>:FBS8
的处理器强>:JAXA
假设需要更改Xquery表达式,但是如何更改呢?
随函附上的情况下,我的描述不清楚的KML。将不胜感激一些提示和例子来提取从这个KML的属性。亲切的问候,克里斯。
XQueryExtractor需要特定的XQuery表达式,通常对于html表,您可以尝试使用XMLFragmenter,它的特性path = 'tr'将描述的表行以行.列的形式平铺到它的组件字段中。但是,我查看了一下您的kml,注意到数据并没有存储在html表中,而是存储在一个大的文本字段中。因此,您将不得不使用文本处理来提取您想要的值。我会跟进你的支持案例,进一步解释。
这是一个很好的例子,但由于某种原因,即使我的数据结构非常类似于它没有为我工作。我发现,这没有工作..
声明默认元素命名空间“http://www.w3.org/1999/xhtml”;对于$x in//tr where(exists($x/td[1])和compare($x/td[2]/text(),“<;Null>;”),返回fme:set attribute($x/td[1]/text(),$x/td[2]/text())
//tr提取行,不管之前发生了什么,这非常方便,这样您就不需要真正了解结构。
where(exists())部分由于未知的原因是必需的。我尝试过的任何没有where子句的东西都没有结果。compare子句删除了NULL参数,这些参数在我的数据中格式为<>。我不确定这是KML标准还是我的数据集特有的。
我还发现,我必须公开希望保留的属性,并将它们添加到目的地。这样就不必理解_results字段了。
希望这可以帮助别人...
声明默认元素名称空间“http://www.w3.org/1999/x html”;对于$x in/html/body/table/tr return fme:set attribute($x/td[1]/text(),$x/td[2]/text())
感谢您的例子。
我还有一个kml,它的格式与本例不同。我尝试了XQueryExtractor和XML压扁器,但都无法提取属性。我想知道是否有人能帮助我获得正确的查询,从以下xml格式中提取名称和属性:
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
http://www.w3.org/1999/xhtml“>
©2020安全亚搏在线软件公司|法律