我有一个看起来像这样的文本文件:
XXX^YYYY^AAAAA^XXXXXX^AAAAAA....
Run Code Online (Sandbox Code Playgroud)
使用插入符号(^)分隔字段,我的假设是:
第一个字段= NAME
第二
个字段= 姓氏第三个字段=地址
等等..
我想使用xsl(XSLT)将其转换为有效的XML.如:
<name>XXX</name>
<l_name>YYYY</l_name>
Run Code Online (Sandbox Code Playgroud)
我知道可以使用Perl轻松完成,但如果可能的话,我需要使用XSLT.
我的格式很好(我不想复制所有数据):
StartThing
Size Big
Colour Blue
coords 42, 42
foo bar
EndThing
StartThing
Size Small
Colour Red
coords 29, 51
machin bidule
EndThing
<!-- repeat a few thousand times-->
Run Code Online (Sandbox Code Playgroud)
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="text-encoding" as="xs:string" select="'iso-8859-1'"/>
<xsl:param name="text-uri" as="xs:string" select="'unparsed-text.txt'"/>
<xsl:template name="text2xml">
<xsl:variable name="text" select="unparsed-text($text-uri, $text-encoding)"/>
<xsl:analyze-string select="$text" regex="(Size|Colour|coords) (.+)">
<xsl:matching-substring>
<xsl:element name="{(regex-group(1))}">
<xsl:value-of select="(regex-group(2))"/>
</xsl:element>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="text2xml"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
它可以很好地将对解析成元素和值.它给了我这个输出:
<?xml version="1.0" encoding="UTF-8"?> …Run Code Online (Sandbox Code Playgroud) 我不熟悉不同格式之间的转换.我的目标是将符号从纯文本格式的工具包转移到svg.一个简单的例子是我有一个橙色椭圆,符号就像这样(x和y是坐标系,所以0和0表示椭圆在中间):
GRAPHREP
PEN color:$000000 w:2pt
FILL color:$ff7f00
ELLIPSE x:0pt y:0pt rx:114pt ry:70pt
Run Code Online (Sandbox Code Playgroud)
我想要的输出将是一个像这样的svg代码(cx和cy坐标是随机选择的例子):
<svg width="400" height="400" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<g>
<ellipse fill="#ff7f00" stroke="#000000" stroke-width="2" stroke-dasharray="null" stroke-linejoin="null" stroke-linecap="null" cx="250" cy="250" id="svg_1" rx="114" ry="70"/>
</g>
</svg>
Run Code Online (Sandbox Code Playgroud)
我发现这两个线程Parse文本文件使用XSLT和XSL转换文本到XML使用未解析的文本:需要更深入的 地方,他们使用XSLT 2.0和未解析的text()函数和正则表达式将纯文本转换为xml.在我的例子中,如何获得像ELLIPSE这样的命令(是一个可以识别所有大写单词的正则表达式?)和参数(无论如何都可以从纯文本中获取Xpath?)?在XSLT 2.0中是一个很好的实现,还是我应该寻找另一种方法?任何帮助,将不胜感激!