我能够使用XSLT 3.0将JSON转换为XML。在转换为XML字段时,主题中的数据缺少XML结构。Json To Xml使用xslt
{
"student" : "john",
"class" : "Bachelors",
"subjects" : "<college><subject><subjects>maths</subjects><term>spring</term></subject></college>"
}
XSLT:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="jsonText"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template name="init">
<xsl:apply-templates select="json-to-xml($jsonText)"/>
</xsl:template>
</xsl:stylesheet>`
Java代码:
public static void main(String[] args){
final String XSLT_PATH = "src/so/test1/json2xml.xsl";
final String JSON = ""{\n" +" \"student\": \"john\",\n" +
" \"class\": \"Bachelors\"\n" +
" \"subjects\": \"<college><subject><subjects>maths</subjects><term>spring</term></subject></college>"\n"
"}";
OutputStream outputStream = System.out;
Processor processor = new Processor(false);
Serializer serializer = processor.newSerializer();
serializer.setOutputStream(outputStream);
XsltCompiler compiler = processor.newXsltCompiler();
XsltExecutable executable = compiler.compile(new StreamSource(new File(XSLT_PATH)));
XsltTransformer transformer = executable.load();
transformer.setInitialTemplate(new QName("init"));
transformer.setParameter(new QName("jsonText"), new
XdmAtomicValue(JSON));
transformer.setDestination(serializer);
transformer.transform();
}
错误:
Error at char 12 in xsl:apply-templates/@select on line 8 column 58 of json2xml.xsl:
FOJS0001: Invalid JSON input: Unescaped control character (xd)
Exception in thread "main" net.sf.saxon.s9api.SaxonApiException: Invalid JSON input: Unescaped control character (xd)
at net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:599)
at com.xmltojson.sampleclass.SimpleJaxp.main(SimpleJaxp.java:49)
Caused by: net.sf.saxon.trans.XPathException: Invalid JSON input: Unescaped control character (xd)
我不认为''“{\ n”'编译。所以你可能想花时间准备一个最小但完整的格式化的代码示例,允许其他人重现该问题;如果用Java运行Saxon是个问题,甚至可能会出现一个新问题,第一个句子仍然是“当转换为XML字段时,主题中的数据缺少XML结构”以及如果给出的答案是奇怪的,那么编辑问题以询问一个新问题 –
你正在做一个可怕的工作来格式化你的代码片段我已经编辑了一些适用于我的Saxon的Java代码的答案9.8 HE。 –
@MartinHonnen谢谢,我可以使用同一段Java代码从XML转换为JSON。 – bookofcodes