题目中的问题:“xfmaps” https://knowledge.亚搏在线safe.com/questions/topics/single/1179.html “xfmaps”主题的最新问题 xfmap提取父属性 https://knowledge.亚搏在线safe.com/questions/87654/xfmap-extract-parent-atribute.html

你好,

我有以下部分的XML:

0

0

0

0

0

0


并编写xfMap脚本:



但我无法在字段元素中获取属性conditionName。

能帮我个忙吗?

谢谢

XML xfmaps 结婚,2019年2月27日11:38:58 GMT 特纳
用xfmap解析复杂XML https://knowledge.亚搏在线safe.com/questions/57417/parsing-complex-xml-with-xfmap.html
       

       
  
        
  
        
    
         
          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 xfmaps XF映射 星期二,格林尼治时间2017年11月7日18:38:51 runneals
公开已知的XML/JSON属性 https://knowledge.亚搏在线safe.com/questions/49603/exposing-known-xmljson-attributes.html

我有一个已知的XML文件/提要结构,并使用xfmap文件映射属性。XML提要并不总是包含提要中的所有字段。是否有方法从xfmap文件填充reader属性?

XML xfmaps 星期四,格林尼治时间2017年8月03日18:28:26 runneals
原始记录 https://knowledge.亚搏在线safe.com/questions/45977/xfmap-raw-record.html网站

目前我有一个XFMap文件来解析属性,但我正在考虑创建一个属性,该属性使用项目的原始XML编写为CLOB。在解析出所有其他属性时,是否有一种简单的方法将其添加到XFMAP中,以将其作为属性包含在其中?我试过映射match="。"映射匹配=“*.”,映射匹配="*"所有不正确的工作。

事先谢谢!

==特征映射来解析每一项==

== Feature-Content-Map(我要做的工作==)

xfmaps 星期四,2017年6月15日15:52:23格林尼治时间 runneals
为什么这个xmp文件不正确 https://knowledge.亚搏在线safe.com/questions/39877/why-is-this-xmp-file-not-correct.html

spoormodel.zip@juanchuchow1323

希望你能帮我?

我创建了一个xmp文件,它将点聚合成折线,但不幸的是它不起作用。

我在尝试翻译的xml文件和创建的xmp文件中附加了一个zip文件。

我不知道出了什么事。

谢谢提前

xfmaps 妈,格林尼治时间2017年2月13日18:36:02 bertdoeve
动态xfMap例子 https://knowledge.亚搏在线safe.com/articles/1180/dynamic-xfmap-example.html

说明

许多用户在阅读复杂的xml或gml方面存在问题。方法是使用FME的XML阅读器,无论是用功能路径,它在给定节点上查询XML,具有扁平化选项,或者用一个xfMap这为查询XML和构建特性提供了广泛的选项。xfMaps的基本思想是在特性映射部分中指定要将xml结构中的哪个节点转换为特性类型。然后在“要素内容映射”部分指定每个要素包含的内容。

XFmap排序属性

然而,有时这很困难,因为源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的例子

假设我们想阅读下面的源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
            
         
        

将几何图形添加到动态模式xfmaps

如何添加几何?在我见过的大多数动态模式案例中,几何本身并不是完全动态的。对于这种类型的xml,通常有一组已知的几何图形。每个特征可能包含,也可能不包含,但是必须有一些预定义的方法来存储几何图形,否则,它将是太困难的工作。当然,如果每个特性只是在属性中嵌入了坐标值,FME总是可以使用2dpointreplacer将这些转换为工作台内的点。


对于这个例子,我们只有一个与基本例子相似的边界框。注意,我们不需要定义异常,因为第一个映射匹配只与属性匹配,而不与Coordinate_BOX匹配,所以我们要做的就是在Coordinate_BOX上显式匹配,然后像在“基本”示例中那样构建几何图形:

      
                          
                    
                        
                                                                       
                          
        

引用映射来添加几何特征

在我们结束之前,添加一些几何特征如何?从上面的源数据可以看出,几何图形具有唯一的标识符:

 
        
       

当每个特性有多个几何形状,并且需要能够像GML 3.2.1中那样分别标识它们时,保存这些几何形状就变得尤为重要。

我们可以使用到feature map的引用映射来获取这个值,如下所示:

   
            
               
          
           
                  
                    
           	     
            	       
             	     
            	     
            	       
             	     
            	   
           	 
          
        
       

这只是告诉FME创建一个名为identifier的引用,并在读取器在遍历源xml时遇到标识符时在其中存储标识符的值。然后,每当我们想要检索标识符的值时,我们将存储最后一个(LIFO)。这允许子元素在扫描父元素时检索值集。

那么,我们可以修改几何部分,包括如下特征:

     
              
                 
                    
                       
                      
                     
                       
            	   
                   
                  
          	   
                          
             
        

而不是定义一个属性,我们定义一个特征,而不是提取表达式,我们使用refexpr或引用表达式检索前面在引用创建中设置的值。注意,我们可以定义一个新的reference map部分,而不是将它放在feature map中,但是,只有当我们希望能够从非特征元素或其中的元素捕获标识符时,才需要这样做。

把它们放在一起,现在我们有了一个xfmap,它将创建一个新的特性类型 ,动态捕获在。中定义的所有元素 标签属性,再加上盒子的几何形状。


完成“动态模式示例”XFmap

 
        
       
        http://www.w3.org/1999/xlink" >
             
                
           
            
                   
                     
            	     
             
              
             	     
             
              
             	   
            	 
                 
                    	   	        
           
             
                
                   
                      
             
              
                       
             
              
                      
                  
               
              
                
                   
                      
             
              
                       
             
              
                     
                    
            	   
                            
               
            
        	 
        
XML gml xfmaps XML功能映射器 星期五,2016年9月23日14:50:09格林尼治标准时间 RobynR
学习xfmap -嵌套列表的问题… https://knowledge.亚搏在线safe.com/questions/33602/learning-xfmap-problems-with-nested-lists.html

在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解决过类似的问题吗?提前表示感谢。

XML xfmaps 星期四,2016年9月08日格林尼治时间11:13:23 hordor
使用xfmaps读取XML:扁平化示例-从XML文件提取所有属性 https://knowledge.亚搏在线safe.com/articles/23308/xml-reading-with-xfmaps-flattening-example-extract.html

下载

source.xml

xfmap-structure.xml

xml2ffs-structure.fmw

这是一种从标记匹配项下递归提取所有属性的技术。这个小技巧可以让任何FME用户快速读取几乎任何XML数据集,所以它非常强大。它还可以与XML几何阅读方法结合使用。

说明

许多用户在阅读复杂的xml或gml方面存在问题。实现这一点的方法是使用FME的通用XML阅读器。这可以通过特性路径来实现。然而xfmaps是xml整合脚本,它为您提供了充分的灵活性,可以按照您希望的方式读取xml,包括几何整合,这是特性路径还不支持的。其基本思想是,在“功能映射”部分中指定要构成功能类型的XML结构中的哪个节点。然后在feature content map部分中指定每个特性包含什么。

XfMap结构命令

这可能会花费一些时间来列出你所有的属性,这是一种递归提取标签匹配下面所有属性的技术。这个小技巧可以让任何FME用户读取几乎任何XML数据集,所以它非常强大。
  
           
  
            
 
             

'mapping match= ' ' Feature/* ' '表示映射父节点为' Feature/* '的所有子节点 。的 命令扁平化他们的名字从:

 
            
   
             
              约翰
             
   
             
              温哥华
             
   
             
               
              
               11-22-99
              
               
              
               12-11-09
              
   
             
 
            
:

attribute1 = Johnattribute2 = VancouveractiveDate_from = 11-22-99activeDate_to = 12-11-09

注意事项

唯一需要注意的是,它为匹配的标记下的所有内容构建父级childattrbite的属性名。同时,在“childAttribute”多次出现的地方,你在FME childAttribute{0}中得到一个列表结构,子属性1。然后您可以决定在childAttribute级别而不是父级匹配标记,或者您可以在FME中使用list爆炸性工具为每个列表元素创建单独的特性。


关键是,这是一种快速将XML数据读取到FME中的方法,特别是如果它只是属性。你可以混合文字定义和这些递归定义,只要它们不重叠。如果您试图将一个标记匹配两次,解释器首先命中的那个标记将获胜,为了避免冲突,您需要列出不希望在异常下递归解构的标记。

源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
                
  
               
  
              

             

向结构XFMaps中添加几何图形

诀窍是定义一个异常,这样我们就不会尝试将几何字段“坐标箱”自动渲染为属性。我们通过将映射表达式限定为:
             
  
              

               
这意味着结构命令将遍历/*下面的所有元素(因此是通配符),但跳过Coordinate_BOX元素。然后我们可以处理盒子的几何形状,就像我们在基本的例子:
  
                   
  
                 
  
                  
  
                      
     
  
                    
  
                   

把它们放在一起,现在我们有了一个xfmap,它将创建一个新的特性类型 ,动态捕获下面的所有元素 作为属性,再加上盒子的几何形状。我知道,这个xfmap看起来可能有点奇怪,但是一旦你尝试了一些这样的例子,你就会发现它其实并不像你想象的那么可怕。

完成了“扁平化示例”XFmap

                   

                   
  
                    
  
                     
  
                       
                        
                      
  
                              
  
                               
  
                    
  
                     
  
                      
  
                       
  
                        
      
                      
     
                       
      
                        
     
                       
     
                       
      
                        
     
                       
    
                         
  
                      
  
                       
  
                           
     
  
                         
  
                        
  
                           

                   

XML xfmaps 星期四,2016年2月11日21:34:31格林尼治时间 Mitats亚搏在线afe公司
基本xfMap例子 https://knowledge.亚搏在线safe.com/articles/1089/basic-xfmap-example.html

下载

请注意:

在FME中,现在可以使用更简单的方法读取XML。看到的文章:

说明

许多用户在阅读复杂的xml或gml方面存在问题。实现这一点的方法是使用FME的通用XML阅读器。但是要做到这一点,您需要创建一个xfmap。其基本思想是,在“功能映射”部分中指定要构成功能类型的XML结构中的哪个节点。然后在feature content map部分中指定每个特性包含什么。下面是一个帮助您入门的非常基本的示例。然后您可以添加到其中,并使其像您以后想要的那样复杂。

源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
          
		
         
	
        

       

XFmap功能类型

如您所见,这是一个嵌套结构。所以我们要做的第一件事就是决定在FME中哪个节点表示我们的特征类型。我们可以选择FeatureCollection,但是我们会有一个巨大的记录。或者我们可以选择activeDate作为我们的特性类型,但是这样我们就会丢失很多其他信息。因此,在这种情况下,使特征类型最好的位置可能是在节点处 。我们已经看到,这应该会产生两个特性,因为源xml中有两个特性块。


在Xfmaps中,我们使用特性映射来定义我们的特性类型。在这种情况下,它看起来像:

       

       
	
        
		
         
			
          
				
           
			
          
		
         

        
       

这告诉FME在读取“feature”元素时构造一个feature。请注意,我们还没有定义任何内容,因此这只是一个容器,我们稍后将填充它。

XFmap属性

因此,让我们为新特性类型定义一些内容。这里的诀窍是,我们可以根据需要读取任意多的或少的xml。唯一的限制是xfmap只处理一次匹配,所以只使用第一个匹配。让我们从一些简单的事情开始。

       

       
	
        
		
         
			
          
				
           
			
          
		
         
	
        
	
        
		
         
			
          
				
           
					
             
              
            
					
             
              
            
				
           
			
          
		
         
	
        

       

映射match ="attribute1"告诉我们要在哪个节点上进行匹配。 标记定义我们要创建的属性。 , 指定实际字段名和值。extract expr="."定义字段的内容。“。”部分表示我们从当前匹配的元素中获取值。

用你XFmap

要实际读取这些数据,您需要将源文件粘贴到source.xml文件中,或从本页底部下载。然后您可以将其拖放到Workbench中,选择通用XML阅读器,然后点击参数按钮,为配置类型选择xfmap,然后浏览到xfmap文件。如果您的xfmap配置正确,您应该得到一个名为Field的新特性类型,其中一个字段名为attr1。注意,它没有几何图形,因此要查看内容,您可以连接到可视化器,运行它,然后在查看器中选择“不查看几何图形”。祝贺你,您刚刚创建了第一个xfmap来解析xml源文件。

xfmap多属性

添加更多字段如何?好吧,我们可以为每个字段有单独的映射,但是在一个映射表达式中列出我们想要的所有字段更容易。替换上一个 部分:

       
	
        
		
         
			
          
				
           
			
          
			
          
				
           
			
          
		
         
	
        

       


这将为attribute1和attribute2创建字段。local-name将保持名称与匹配的标记相同,“。”将提取匹配的值。这样设置比较短,但不允许重命名字段。

XFmap嵌套属性提取

嵌套日期结构呢?这通常会使传统的关系或简单特性类型的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几何

最后但并非最不重要的,让我们在特性中添加一些几何图形。为此,我们需要在特性中找到定义几何图形的元素,然后需要选择适当的xfmap对象类型来解释几何图形。让我们匹配坐标箱,并使用它创建一个XML框。

       
	
        
		
         
			
          
		
	
        

       

因此,我们在feature content map中像往常一样创建一个映射匹配。但是,这次我们使用geometry_activate命令告诉FME我们要创建一个XML框几何体。还有xml点,xml-line,xml区域和我们可以使用的许多其他几何类型。这些都在读者和作者手册的xml-xfmaps部分中定义。


记住,每次向xfmap添加内容时,都需要重新导入数据集,或者至少删除并重新添加特性类型,以便读取新的模式信息(属性或几何定义)。如果您的工作区不知道您的模式更改,然后,即使您已经将它们添加到xfmap中,它也会忽略它们。

XFmap几何特征

最后,让我们在几何图形中添加一些特征。特征是与特征上的各个几何图形相关联的标记或属性。当我们有多个几何图形与一个特性相关联时,这些就变得尤为重要。通常需要定义几何id,如gml_id。


要添加特征,我们使用 几何定义中的标签如下:

       
	
        
		
         
			
          
		
         
		
         
			
          
		
         
	
        

@符号告诉FME从 对象。


我们的“基本”例子到此结束。我还会添加一些快捷方式和其他几何图形的例子,但是希望这将帮助您开始阅读xml,无论xml的源或结构是什么。

完成XFMAP

把它们放在一起,下面是完整的xfmap文件,它从源xml读取所有数据:

 
       

       
	
        
		
         
          当我们读取“feature”元素时,构造一个FME特性。
         
		
         
			
          
				
           
			
          
		
         
	
        
	
        
		
         
			
          
				
           
					
             
              
            
					
             
              
            
				
           
			
          
		
         
		
         
			
          
				
           
					
             
              
            
					
             
              
            
				
           
				
           
					
             
              
            
					
             
              
            
				
           
			
          
		
         
		
         
			
          
				
           
					
            
				
           
				
           
					
            
				
           
			
          
			
          
				
           
					
            
				
			
          
		
         
	
        

       
XML xfmaps 星期四,2015年10月08日19:15:22 GMT RobynR
XfMap示例——读取JTS XML测试文件 https://knowledge.亚搏在线safe.com/articles/899/xfmap-example-reading-jts-xml-test-files.html

序言-特征路径

这篇文章在我们有XML读取器的功能路径选项。在深入研究xfMaps之前,值得注意的是,在大多数情况下,您不再需要创建XFmap来读取XML。在这种情况下,您最好只使用配置为type=“feature path”且启用扁平化的XML阅读器,而feature path=“case”。结果将是相同的,您不需要创建任何脚本,比如这个XfMap。使用xfMap的唯一原因是,如果您想要一些XML阅读器的高级特性路径设置(例如复杂几何处理或动态模式)。不过,我们将把本文暂时放在这里,以供那些希望使用另一个示例帮助他们学习Xfmap的人参考。

介绍

对于FME最近的一些工作,我们添加了调用 真命天子对FME特性进行isValid和isSimple几何验证测试(通过GeometryValidator transformer和@OGCGeometry函数),我们认为最好对这些情况使用现有的GEOS测试数据,以确保我们的实现正确地反映了GEOS数据。现在,的一个c++端口 Java拓扑套件(JTS),并与它共享一个xmlTester程序,该程序读取用xml表示的测试。我们的想法是在FME中建立一些东西它可以读取用于测试isSimple/isValid的JTS/GEOS测试文件这样我们就可以轻松地重用这些测试,而且很容易利用他们将来可能做的任何测试。
所以我们开始“吃我们自己的狗粮”,并使用FME中的通用XML阅读器来读取JTS/GEOS测试文件,看起来是这样的:
       
  
        
  
        
  
         
          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。我们在这里需要的东西也更加复杂,但是有了医生,可以取得一些进展。

第一次尝试

然后我们勇敢地制作了第一个xfMap。我们把它放在与数据相同的目录中(剧透警告:坏主意),很快就变成了这样:
       


       

        

         


        

       


然后我们再去工作台,试图添加XML泛型的源数据集,这次将设置框指向我们刚刚创建的xfMap文件(并保存为jts_test .xmp)。

没有去。

它找不到xfMap.dtd,所以与其想清楚,我们决定把xfmap和它的兄弟(以及xfmap.dtd)放在fme_home/xfmap目录中。然后我们再次尝试添加源数据集,指向新迁移的xfMap。

宾果。

描述模式

排序的。

我们至少没有得到一个错误,但我们也得到了一个奇怪的命名特性类型作为源模式,没有属性。

在xfmap目录中进行了一些阅读和研究,发现可以在xfmap中指定XML阅读器想要返回的特性的模式。在我们的例子中,如果我们记得我们想要返回的,我们希望xml文件中每个case都有一个特性,每个都有一个描述,一个几何字符串(在OGC众所周知的文本(WKT)中),测试类型(isValid或isSimple),以及测试结果。这些特征本身不会出现在任何几何图形中,因此,我们将为FME的模式处理器指出它们没有几何结构(xml_no_geom)。特性类型也可以是TestCase(我们可以为它选择任何东西,但听起来不错)。所以,考虑到这一点,下面是xfMap的模式部分:
       


       

        
  
         
  
          
  
           
  
           
  
           
  
           
  
           
  
          
  
         

        

        

         


        

       


属性类型来自FME_HOME/metafile/xml_common_attr_map.fmi所允许的词汇表。xml_buffer表示任意一长串东西,在本例中是文本。

再一次,我们回到工作台添加源数据集,指向新修订的XFMAP。

现在我们说的…

这一次,我们的图式刚刚通过。所以我们在新读取的源特性类型定义之后,然后点击运行按钮。

阅读功能

哎呀。没有正在读取的数据。为什么不呢?好吧,我们还没有指定如何将数据从case xml对象移动到fme特性中。

这就是xfMap的作用所在。

我们需要构建功能图。现在,这是一个非常简单的情况,因为我们实际上只有一种我们将要阅读的特性(在很多情况下,生活不会如此简单)。感恩,我们深入研究并发现,您可以在xfMap中指定一些只做所需的事情。

每个案例一个特征

首先要注意的是,您告诉xfMap使用mapping match指令为自己构建一个特性。所以如果我们想要为我们遇到的每个案例建立一个特性,我们是这样设置的:
 
       

如果我们想要它的特征类型是 TestCase,我们这样说:
 
        
         
          

现在我们有了xfMap:
       


       

        
  
         
  
          
  
           
  
           
  
           
  
           
  
           
  
          
  
         

        

        

         

           
            
             

          

         

        

       


(注意,我们甚至添加了一个注释,就像那些很酷的XML家伙所做的那样:)

我们保存它并再次运行工作区,现在我们将功能取出并记录下来。哇!

钓鱼了属性

一切看起来都很好,但是我们的功能没有任何属性。

没有问题。gpx xfmap处理了这种情况,我们还可以将XML块的提取设置为FME属性。回想一下单个的“case”元素是这样的:
   
       
      
        
         L型线环领结
        
      
        线性(0 0,100 100,100 0,0 100,0 0)
      
        
  
         
  
        
  
       

很容易看出 desca(在所有这些例子中都是几何图形)很容易找到——下面是xfMap的语法:
   
       
     
           
          
        
     
          
          
        
   
       
   
                    
     
           
          
        
     
          
          
          
   
       

这表明我们将使用<创建FME属性。 的名字从命名为的XML子树的值中提取的值指定> desc和一个。

但是如何从 测试子树——在这里,我们希望提取op名称和值(即 在上面的例子中)。

得到这个值很简单,和我们之前做的一样 desc,只有现在,我们才能在提取表达式中指定一个附加级别:
   
       
     
           
          
        
     
          
          
        
   
       
注意 测试/ op提取表达式--这抓住了 出去了。

所有伟大的。最后一个技巧,我们如何从 op的名字,在标签规范中。xfmaps的文档表明,方法是使用@查找XML属性的名称。在和语法斗争了一段时间之后,这是正确的:
   
       
     
           
          
        
     
          
          
        
   
       

请注意,[@]包含标记属性的标识符。


注意:要从父标记内部获取值(例如case xxxx="1234"),只需使用:
   
         
         
       


把它们放在一起,我们最终以这个作为我们的决赛,工作,出色xfMap:
       


       

        
  
         
  
          
  
           
  
              
  
              
  
              
  
              
  
          
  
         

        

        

         

           
            
          

          
  
           
  
             
              
            
  
             
              
            
  
           
  
           
  
             
              
            
  
             
              
            
  
           
  
           
  
             
              
            
  
             
              
            
  
           
  
           
  
             
              
            
  
             
              
            
  
           

             

             

         

        

       

以自定义格式包装它

这是圣诞节的前夜,最后一步是用一种自定义格式“包装”所有这些内容,使其使用起来最方便。它很好地将xfMap与格式打包在一起,这样最终用户在读取格式时就不必选择xfMap。

至于具体的操作细节,留给那些已经读到这里的读者去练习。

XML xfmaps 星期四,2015年10月8日19:14:51 GMT Mitats亚搏在线afe公司
使用xfMaps读取XML https://knowledge.亚搏在线safe.com/articles/831/reading-xml-using-xfmaps.html网站


请注意:

在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相同的源数据,但使用名为结构命令的快捷方式来自动平铺 节点转换为父节点、子节点等。这实际上为您提供了一种在特定节点上“切片”XML的快速方法,而无需编写详细的XFMAP。


然后是 xfmap_示例\u动态 它将向您展示如何读取没有预定义模式,而是将模式嵌入到xml数据本身中的xml。

XML xfmaps 星期四,2015年10月08日19:14:40 GMT KenAt亚搏在线Safe