【问题标题】:Converting FGDC XML to ISO XML using XSLT使用 XSLT 将 FGDC XML 转换为 ISO XML
【发布时间】:2016-06-10 16:26:59
【问题描述】:

只是想知道是否可以使用 XSLT 转换文件将 XML 从一种标准转换为另一种标准。我正在尝试将 FGDC 元数据转换为 ISO 19139。我有一个应该能够转换它的 XSLT。

如果可能的话,下面的代码是否缺少我的东西?

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'"/>

【问题讨论】:

  • 样式表链接失效。
  • 对不起,我已经编辑了链接。现在应该可以工作了。我一直遇到错误 lxml.etree.XSLTParseError: Invalid expression

标签: xml python-2.7 xslt lxml


【解决方案1】:

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) 

【讨论】:

  • 感谢 Parfait,运行该脚本时出现以下错误。 >>> Traceback(最近一次调用最后):文件“”,第 254 行,在 run_nodebug 文件“”,第 19 行,在 文件“src/lxml/xslt.pxi”中,第 409 行, 在 lxml.etree.XSLT.__init__ (src\lxml\lxml.etree.c:173339) lxml.etree.XSLTParseError: Invalid expression >>>
  • lxml.etree.XSLTParseError: 无效的表达式
  • XSLT 脚本存在问题。请发布一个sn-p。提醒一下,Python 的 lxml 只能运行 XSLT 1.0 脚本。
  • 刚刚在原始问题中发布了 XSLT 脚本示例以及更新的工作链接。我看到它确实说 version="2.0",但不确定这是指什么。
  • 仔细一看,确实是XSLT 2.0版。在这种情况下有其他选择吗?
猜你喜欢
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 2019-04-11
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多