XSLTが初めてのため、XSLT 3.0を使用してXMLに変換する単純なJSONがあります。私はwsec勧告に従ってparsejsonとjsontoxml関数を試しましたが、生成された出力は希望の形式ではありません。私は目的のためにサクソニカプロセッサを使用しています。キーの名前に関係なく、特定の構造の任意のjsonで使用できる単一のxsltを書くことは可能ですか? [JSON to XML transformation in XSLT 3.0、しかしXSLT 3.0の関数を使用してJSONをXMLに変換する
入力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>
が動作していない:それ以外の場合はどのように私は答えの例を試してみました
XSLT機能を使用して、所望のXMLにJSONに変換するために近づくことができます
予想される出力
<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>
私は以下
<?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>
私のXSLTを使用してしまった実際の出力は、私は、変換に
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);
}
問題は、希望する形式のJSONが許可されていない要素名「key 1」になるため、 '{" key 1 ":1}'です。そのため、 'json-to-xml'関数が返す形式は、JSONプロパティ名を属性に置きます。だから、現在あなたが望むものになるXMLからの変換を書くことはあなたの提示された入力には些細なものですが、あなたが一般的に望む結果がはっきりしません。 –
@MartinHonnen:答えに感謝し、キーのスペースについてメモしてください。私はjsonをxsltプロセッサに渡す前にそれを処理しなければならないと思う。私は正しい? – user1817701