gpt4 book ai didi

xml - 使用 XSLT 将常规文本文件转换为 XML

转载 作者:数据小太阳 更新时间:2023-10-29 01:43:20 27 4
gpt4 key购买 nike

我有一个看起来像这样的文本文件:

XXX^YYYY^AAAAA^XXXXXX^AAAAAA....

字段使用插入符号 (^) 分隔,我的假设是:

第一个字段 = NAME
第二个字段 = 姓氏
第三个字段=地址

等..

我想使用 xsl (XSLT) 将其转换为有效的 XML。比如:

<name>XXX</name>
<l_name>YYYY</l_name>

我知道使用 Perl 可以轻松完成,但如果可能的话,我需要使用 XSLT 来完成。

最佳答案

可以使用标准 XSLT 2.0 函数读取文本(非 XML)文件 unparsed-text() .

然后可以使用标准的 XPath 2.0 函数 tokenize() 和另外两个 standard XPath 2.0 functions that accept regular a expression 作为他们的论点之一—— matches() replace() .

XSLT 2.0 有其强大的 instructions to handle text processing using regular expressions: : <xsl:analyze-string> , <强> <xsl:matching-substring> <xsl:non-matching-substring> 说明。

在这个真实示例中,使用这些函数和指令了解 XSLT 文本处理的一些更强大的功能:一个 XSLT solution to the WideFinder problem .

最后,这是一个 XSLT 1.0 解决方案:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
xmlns:my="my:my" exclude-result-prefixes="ext my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<my:fieldNames>
<name>FirstName</name>
<name>LastName</name>
<name>City</name>
<name>State</name>
<name>Zip</name>
</my:fieldNames>

<xsl:variable name="vfieldNames" select=
"document('')/*/my:fieldNames"/>

<xsl:template match="/">
<xsl:variable name="vrtfTokens">
<xsl:apply-templates/>
</xsl:variable>

<xsl:variable name="vTokens" select=
"ext:node-set($vrtfTokens)"/>

<results>
<xsl:apply-templates select="$vTokens/*"/>
</results>
</xsl:template>

<xsl:template match="text()" name="tokenize">
<xsl:param name="pText" select="."/>

<xsl:if test="string-length($pText)">
<xsl:variable name="vWord" select=
"substring-before(concat($pText, '^'),'^')"/>

<word>
<xsl:value-of select="$vWord"/>
</word>

<xsl:call-template name="tokenize">
<xsl:with-param name="pText" select=
"substring-after($pText,'^')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>

<xsl:template match="word">
<xsl:variable name="vPos" select="position()"/>

<field>
<xsl:element name="{$vfieldNames/*[position()=$vPos]}">
</xsl:element>
<value><xsl:value-of select="."/></value>
</field>
</xsl:template>
</xsl:stylesheet>

当此转换应用于以下 XML 文档时:

<t>John^Smith^Bellevue^WA^98004</t>

产生了想要的、正确的结果:

<results>
<field>
<FirstName/>
<value>John</value>
</field>
<field>
<LastName/>
<value>Smith</value>
</field>
<field>
<City/>
<value>Bellevue</value>
</field>
<field>
<State/>
<value>WA</value>
</field>
<field>
<Zip/>
<value>98004</value>
</field>
</results>

关于xml - 使用 XSLT 将常规文本文件转换为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675889/

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