我是一个noobie到计算器和XSLT,所以我希望我不健全的愚蠢!
所以我用SDI工作的GIS公司,我有需要我转换是在一个空间参照系统点任务(SRS)坐标平面,如EPSG:4035,世界SRS,又名EPSG:4326。 这实在是对我并没有问题,因为我有一个在线服务,只是给我我想要的可访问性。 然而,它输出格式是JSON或HTML。 我浏览过一会儿找到一种方法来提取一个JSON文件信息,但大部分我见过使用XSLT的技术:样式2.0版本,我必须使用1.0版本。 一种方法我想到了用文件做($ urlWithJsonFormat)XSLT的功能,然而这仅接受XML文件。
这里是JSON格式的文件,我会要求在转换后恢复的例子:
{
"geometries" :
[{
"xmin" : -4,
"ymin" : -60,
"xmax" : 25,
"ymax" : -41
}
]
}
所有我只是想是XMIN,YMIN,XMAX和YMAX值,这就是全部! 它只是似乎很简单但没有什么工作对我来说...
你可以使用一个外部实体 ,包括JSON数据作为一个XML文件,你再改造的一部分。
举例来说,假设JSON保存为一个名为的例子“geometries.json”你可以创建这样一个XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wrapper [
<!ENTITY otherFile SYSTEM "geometries.json">
]>
<wrapper>&otherFile;</wrapper>
然后用下面的XSLT 1.0样式改造它:
<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('"',
$member,
'"'))
, ':')
,' ')
, ',', '')
)"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
为了产生下面的输出:
<geometries>
<xmin>-4</xmin>
<ymin>-60</ymin>
<xmax>25</xmax>
<ymax>-41</ymax>
</geometries>
这里的两个主要的选择似乎是:
- 写(或使用)一个JSON解析器在XSLT 1.0,或
- 使用其他语言比XSLT。
由于XSLT 1个引擎通常无法处理JSON直接我推荐使用某种语言转换为XML。
https://github.com/WelcomWeb/JXS可以帮助你,如果这是XSLT在Web浏览器。