使用XSLT 1.0版从JSON文件中提取信息 [英] extracting information from a JSON file using XSLT version 1.0

查看:130
本文介绍了使用XSLT 1.0版从JSON文件中提取信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是stackoverflow和xslt的忠实拥护者,所以我希望我不要听起来很笨拙!

I'm a noobie to stackoverflow and xslt so I hope I don't sound unintelligent!

因此,我正在与GIS公司的SDI合作,我的任务是要求将一个空间参考系统(SRS)坐标平面中的点(例如EPSG:4035)转换为世界SRS(也称为EPSG) :4326.对于我来说,这确实不是问题,因为我可以使用在线服务来获取所需的信息.但是,它输出的格式为JSON或HTML.我浏览了一段时间,找到了一种从JSON文件中提取信息的方法,但是我见过的大多数技术都使用xslt:stylesheet 2.0版,而我必须使用1.0版.我考虑过的一种方法是使用document($ urlWithJsonFormat)xslt函数,但这只接受xml文件.

So I am working with SDI for a GIS company and I have a task that requires me to convert points that are in one spacial reference system (SRS) coordinate plane, such as EPSG:4035, to the world SRS, aka EPSG:4326. This really isn't a problem for me since I have the accessibility of an online service that will just give me what I want. However, the format that it outputs is in either JSON or HTML. I have browsed for a while to find a way to extract information from a JSON file but most of the techniques I have seen use xslt:stylesheet version 2.0, and I have to use version 1.0. One method I thought about doing was using the document($urlWithJsonFormat) xslt function, however this only accepts xml files.

这是我要求转换后将检索的JSON格式文件的示例:

Here is an example of the JSON formatted file that I would retrieve after asking for the conversion:

{
  "geometries" : 
  [{
      "xmin" : -4, 
      "ymin" : -60, 
      "xmax" : 25, 
      "ymax" : -41
    }
  ]
}

我只想要的是xmin,ymin,xmax和ymax值,仅此而已!看起来似乎很简单,但对我没有任何帮助...

All I simply want are the xmin, ymin, xmax, and ymax values, that's all! It just seems so simple yet nothing works for me...

推荐答案

您可以使用外部实体,以将JSON数据作为XML文件的一部分包含,然后进行转换.

You could use an external entity to include the JSON data as part of an XML file that you then transform.

例如,假设示例JS​​ON被保存为名为"geometries.json"的文件,则可以创建一个如下所示的XML文件:

For instance, assuming the example JSON is saved as a file called "geometries.json" you could create an XML file like this:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wrapper [
<!ENTITY otherFile SYSTEM "geometries.json">
]>
<wrapper>&otherFile;</wrapper>

然后使用以下XSLT 1.0样式表对其进行转换:

And then transform it with the following XSLT 1.0 stylesheet:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="wrapper">
    <geometries>
        <xsl:call-template name="parse-json-member-value">
            <xsl:with-param name="member" select="'xmin'"/>
        </xsl:call-template>
        <xsl:call-template name="parse-json-member-value">
            <xsl:with-param name="member" select="'ymin'"/>
        </xsl:call-template>
        <xsl:call-template name="parse-json-member-value">
            <xsl:with-param name="member" select="'xmax'"/>
        </xsl:call-template>
        <xsl:call-template name="parse-json-member-value">
            <xsl:with-param name="member" select="'ymax'"/>
        </xsl:call-template>
    </geometries>
</xsl:template>

    <xsl:template name="parse-json-member-value">
        <xsl:param name="member"/>
        <xsl:element name="{$member}">
            <xsl:value-of select="normalize-space(
                                    translate(
                                        substring-before(
                                            substring-after(
                                                substring-after(.,
                                                    concat('&quot;', 
                                                           $member, 
                                                          '&quot;'))
                                                , ':')
                                            ,'&#10;')
                                    , ',', '')
                                  )"/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

产生以下输出:

<geometries>
   <xmin>-4</xmin>
   <ymin>-60</ymin>
   <xmax>25</xmax>
   <ymax>-41</ymax>
</geometries>

这篇关于使用XSLT 1.0版从JSON文件中提取信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆