gpt4 book ai didi

json - 使用 XSLT 3.0 函数将 JSON 转换为 XML

转载 作者:行者123 更新时间:2023-12-03 17:09:42 25 4
gpt4 key购买 nike

我是 XSLT 新手,我有一个简单的 JSON,我想使用 XSLT 3.0 将其转换为 XML。我按照 w3c 建议尝试了 parsejson 和 jsontoxml 函数,但生成的输出不是所需的格式。我正在使用 Saxonica 处理器来达到此目的。是否可以编写一个可在特定结构的任何给定 json 中使用的单个 xslt,而不管键名称如何。否则我如何使用 xslt 功能将 json 转换为所需的 xml

我尝试了答案中的示例:[ JSON to XML transformation in XSLT 3.0 ,但对我不起作用

输入 JSON

<data>{

"Assets": [
{ "Asset": {
"Open": "25.15",
"High": "25.15",
"Low": "25.11",
"Close": "25.87"
}},
{ "Asset": {
"Open": "25.15",
"High": "25.15",
"Low": "25.11",
"Close": "25.87"
}}]

}
</data>

预期输出

<data>
<Assets>
<Asset>
<Close>25.87</Close>
<High>25.15</High>
<Low>25.11</Low>
<Open>25.15</Open>
</Asset>
<Asset>
<Close>25.87</Close>
<High>25.15</High>
<Low>25.11</Low>
<Open>25.15</Open>
</Asset>
</Assets>
</data>

我使用 xslt 得到的实际输出

<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<array key="Assets">
<map>
<map key="Asset">
<string key="Open">25.15</string>
<string key="High">25.15</string>
<string key="Low">25.11</string>
<string key="Close">25.87</string>
</map>
</map>
<map>
<map key="Asset">
<string key="Open">25.15</string>
<string key="High">25.15</string>
<string key="Low">25.11</string>
<string key="Close">25.87</string>
</map>
</map>
</array>
</map>

我的 XSLT 函数

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:math="http://www.w3.org/2005/xpath-functions/math" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs math" version="3.0">
<xsl:output indent="yes" />
<xsl:template match="data">
<xsl:copy-of select="json-to-xml(.)" />
</xsl:template>
</xsl:stylesheet>

下面是我使用 saxon 进行转换的示例代码

        var xslt = new FileInfo("myxslt.xslt");
var input = new FileInfo("inputxml.xml");

// Compile stylesheet
var processor = new Processor(true);
var compiler = processor.NewXsltCompiler();
var executable = compiler.Compile(new Uri(xslt.FullName));
Serializer serializer = processor.NewSerializer();
serializer.SetOutputFile(txtOutput.Text);

// Do transformation to a destination
var destination = new XdmDestination();
using (var inputStream = input.OpenRead())
{
var transformer = executable.Load();
transformer.SetInputStream(inputStream, new Uri(input.DirectoryName));
transformer.Run(serializer);
}

最佳答案

对于给定的输入解决这个问题很简单

<xsl:template match="data">
<xsl:copy>
<xsl:apply-templates select="json-to-xml(.)/*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="*[@key]" xpath-default-namespace="http://www.w3.org/2005/xpath-functions">
<xsl:element name="{@key}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>

但是,使用带有空格、冒号或 XML 元素名称中不允许的其他字符的 JSON 属性名称会很容易破坏该方法。

关于json - 使用 XSLT 3.0 函数将 JSON 转换为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47590058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com