2016-06-10 67 views
0

只是想知道是否可以使用XSLT轉換文件將XML從一種標準轉換爲另一種標準。我試圖將FGDC元數據轉換爲ISO 19139.我有一個XSLT,它應該能夠對其進行轉換。使用XSLT將FGDC XML轉換爲ISO XML

如果可能的話,有什麼我缺少以下代碼?

from lxml import etree 


f_xml = 'U:\\PROJECTS\\FGDC2ISO\\A08727.mxd.xml' 
f_xsl = 'U:\\PROJECTS\\FGDC2ISO\\ISO2.xslt' 
f_out = 'U:\\PROJECTS\\FGDC2ISO\\A08727_ISO.mxd.xml' 

transform = etree.XSLT(etree.parse(f_xsl)) 
result = transform(etree.parse(f_xml)) 
result.write(f_out) 

這裏是一個鏈接到XSLT 編輯鏈接現在好了:

http://service.ncddc.noaa.gov/rdn/www/metadata-standards/metadata-xml/documents/csdgm2iso19115-2.xslt

樣品XSML文件:

<?xml version="1.0" encoding="utf-8" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gmi="http://www.isotc211.org/2005/gmi" xmlns:gmx="http://www.isotc211.org/2005/gmx" xmlns:gsr="http://www.isotc211.org/2005/gsr" xmlns:gss="http://www.isotc211.org/2005/gss" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vmf="http://www.altova.com/MapForce/UDF/vmf" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:grp="http://www.altova.com/Mapforce/grouping" xmlns="http://www.isotc211.org/2005/gmi" version="2.0" exclude-result-prefixes="fn grp vmf xs xsi xsl"> 
    <xsl:template name="vmf:vmf1_inputtoresult"> 
     <xsl:param name="input" select="()"/> 
     <xsl:choose> 
      <xsl:when test="$input='POINT'"> 
       <xsl:value-of select="'point'"/> 
      </xsl:when> 
      <xsl:when test="$input='PIXEL'"> 
       <xsl:value-of select="'point'"/> 
      </xsl:when> 
      <xsl:when test="$input='GRID CELL'"> 
       <xsl:value-of select="'area'"/> 
      </xsl:when> 
      <xsl:when test="$input='VOXEL'"> 
       <xsl:value-of select="'area'"/> 
+0

指向樣式表的鏈接不起作用。 – mzjn

+0

對不起,我編輯了鏈接。現在應該工作。我一直在遇到錯誤lxml.etree.XSLTParseError:無效表達式 – MapZombie

回答

0

XSLT轉換的結果是一個樹對象而不是字符串。因此,您需要在輸出到文件之前將其轉換爲字符串。甚至可以用tostring()指定編碼,甚至可以很好地打印輸出:

transform = etree.XSLT(etree.parse(f_xsl)) 
result = transform(etree.parse(f_xml)) 
xmlstr = etree.tostring(result, encoding="iso-8859-1", pretty_print=True) 

with open('Output.xml','wb') as f: 
    f.write(xmlstr) 
+0

感謝Parfait,我在運行該腳本時遇到以下錯誤。 >>> 回溯(最近通話最後一個): 文件 「」,線路254,在run_nodebug 文件 「」 19行,在 文件 「的src/LXML/xslt.pxi」第409行,在lxml.etree.XSLT .__ init__中(src \ lxml \ lxml.etree.c:173339) lxml.etree.XSLTParseError:無效表達式 >>> – MapZombie

+0

lxml.etree.XSLTParseError:無效表達式 – MapZombie

+0

存在問題使用XSLT腳本。請發佈一個片段。提醒一下,Python的lxml只能運行XSLT 1.0腳本。 – Parfait