我是JSON的新手,对XML知之甚少。我有一个关于从文本到XML或JSON的数据转换的问题。我已经使用过XSL Transformations,我将XML文档转换为XML或文本。但现在,我想做其他方式,即text -> JSON/XML
例如,我有以下文字:
One(A,B) One(A',B)
Two(C,D) Two(C',D)
Three(E,F) Three(E',F)
Four(G,H)
Five(I,J)
因此相应的XML输出可能如下所示:
<B> A,A' </B>
<D> C,C' </D>
<F> E,E' </F>
<H> G </H>
<J> I </J>
我希望问题很清楚,如果不是,请告诉我。 提前谢谢。
答案 0 :(得分:0)
以下是可与XSLT 3.0或Altova XMLSpy / Raptor一起使用的Saxon 9.8样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
exclude-result-prefixes="xs math fn"
version="3.0">
<xsl:param name="input-uri" as="xs:string" select="'input1.txt'"/>
<xsl:output indent="yes"/>
<xsl:template name="xsl:initial-template">
<xsl:apply-templates select="unparsed-text-lines($input-uri)"/>
</xsl:template>
<xsl:template match=".[. instance of xs:string]">
<xsl:for-each-group select="analyze-string(., '\w+\(([^,]*),(\w+)\)')//fn:match" group-by="fn:group[@nr = 2]">
<xsl:element name="{current-grouping-key()}">
<xsl:value-of select="current-group()/fn:group[@nr = 1]" separator=","/>
</xsl:element>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>