使用xslt将文本转换为xml
是否可以使用xslt将文本文件转换为xml。我知道我们可以从xml转换为文本,这一点我在前面已经做过了。但是我们有一个文本文件,需要使用xslt将其结构化为xml 这可能吗 更新:(下面是我需要解析为xml的文本文件) XML:使用xslt将文本转换为xml,xml,xslt,ascii,Xml,Xslt,Ascii,是否可以使用xslt将文本文件转换为xml。我知道我们可以从xml转换为文本,这一点我在前面已经做过了。但是我们有一个文本文件,需要使用xslt将其结构化为xml 这可能吗 更新:(下面是我需要解析为xml的文本文件) XML: 0707 添加 abcde tdef 吉德 0715 abcd fghi 是的,可以将任意文本文件转换为XML文件。您将需要XSLT2.0或更高版本的处理器 您需要使用XSLT解析器中提供的未解析文本函数。这些允许您读取本质上是字符串结果的文件。在这里,您有几个用于解
0707
添加
abcde
tdef
吉德
0715
abcd
fghi
是的,可以将任意文本文件转换为XML文件。您将需要XSLT2.0或更高版本的处理器
您需要使用XSLT解析器中提供的未解析文本
函数。这些允许您读取本质上是字符串结果的文件。在这里,您有几个用于解析字符串的选项
此问题涉及将HL7文本文件转换为XML:。该示例使用tokenize()
进行粗略解析,将字符分隔的文本文件转换为XML文件
我在这方面使用了很多变体,例如使用
tokenize()
来分解行或段落,使用正则表达式来分解字符串的一部分,等等。一般来说,对于一般的文本解析来说,这是不值得的,因为解析时间甚至比shell脚本慢几个数量级。您可以考虑将文本文件预处理为XSLT可以找到更好吃的东西。 < P>是的,可以将任意文本文件转换成XML文件。您将需要XSLT2.0或更高版本的处理器
您需要使用XSLT解析器中提供的未解析文本
函数。这些允许您读取本质上是字符串结果的文件。在这里,您有几个用于解析字符串的选项
此问题涉及将HL7文本文件转换为XML:。该示例使用tokenize()
进行粗略解析,将字符分隔的文本文件转换为XML文件
我在这方面使用了很多变体,例如使用tokenize()
来分解行或段落,使用正则表达式来分解字符串的一部分,等等。一般来说,对于一般的文本解析来说,这是不值得的,因为解析时间甚至比shell脚本慢几个数量级。您可以考虑将文本文件预处理为XSLT可以找到更好吃的东西。 < P>这里有一个例子。
您没有解释每个项如何分解的逻辑,因此我使用了“固定字段”类型的格式。这很容易改变,但应该是一个好的例子,让你开始
文本输入(so.txt)
XSLT2.0(初始模板应设置为text2xml
)
输出
<results>
<b1>
<time>0707</time>
<text>addd</text>
<text2>abcde</text2>
<text>tdef</text>
<text2>ghidd</text2>
</b1>
<b1>
<time>0715</time>
<text>abcd</text>
<text2>fghi</text2>
</b1>
</results>
0707
添加
abcde
tdef
吉德
0715
abcd
fghi
下面是一个使用的示例
您没有解释每个项如何分解的逻辑,因此我使用了“固定字段”类型的格式。这很容易改变,但应该是一个好的例子,让你开始
文本输入(so.txt)
XSLT2.0(初始模板应设置为text2xml
)
输出
<results>
<b1>
<time>0707</time>
<text>addd</text>
<text2>abcde</text2>
<text>tdef</text>
<text2>ghidd</text2>
</b1>
<b1>
<time>0715</time>
<text>abcd</text>
<text2>fghi</text2>
</b1>
</results>
0707
添加
abcde
tdef
吉德
0715
abcd
fghi
我被这个问题弄糊涂了,ASCII只是一个字符集,XML通常使用ASCII字符集……所以这不可能像你说的那样。我们有一个asci文本文件,它需要以XML的形式进行结构,所以我想也许有一种方法可以使用xslt而不是编写itI脚本,我说你的问题毫无意义。XSLT 2.0处理器可以用来读取文本文件,然后可以xsl:analyze string
和/或tokenize
函数。我被这个问题弄糊涂了,ASCII只是一个字符集,XML通常使用ASCII字符集…所以这不可能像你说的那样。我们有一个asci文本文件,它需要以XML的形式进行结构,所以我想也许有一种方法可以使用xslt而不是编写itI脚本,我没有这么说,我说你的问题毫无意义。XSLT 2.0处理器可以用来读取文本文件,然后可以xsl:analyze string
和/或tokenize
函数。unparsed-text()
需要XSLT 2.0。你的链接问题与将文本转换为XML无关。你知道如何将文本解析为XML吗。我编辑了我的问题,给出了一个示例文本文件unparsed-text()
需要XSLT 2.0。您的链接问题与将文本转换为XML无关。您知道如何将文本解析为XML吗。我已经编辑了我的问题,以提供一个示例文本文件。当我在visual studio中运行您的示例以理解代码时,我得到以下错误:根级别的数据无效。第1行,位置1。有吗clue@user726720-这是针对XSLT的错误吗?听起来更像是试图使用文本文件作为XSLT的输入,这是行不通的。(这就是为什么您需要指定初始模板;没有实际输入。)另外,您在VisualStudio中使用的处理器是什么?你需要一个2.0处理器。对不起,我对2.0还不熟悉。你能推荐一位编辑吗。可能VisualStudio似乎支持1.0only@user726720-我更新了我的答案以包含匹配项。如果完全复制该XSLT,请更新文本的路径/文件名
C0707:00addd abcde
C0707:00tdef ghidd
C0715:00abcd fghi
<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="txt-encoding" as="xs:string" select="'iso-8859-1'"/>
<xsl:param name="txt-uri" as="xs:string"
select="'file:///C:/Some/path/so.txt'"/>
<xsl:template match="/" name="text2xml">
<xsl:variable name="txt" select="unparsed-text($txt-uri, $txt-encoding)"/>
<xsl:variable name="entries" as="node()*">
<xsl:analyze-string select="$txt" regex="\r\n?|\n">
<xsl:non-matching-substring>
<xsl:analyze-string select="." regex="^C(.{{4}}):00(.{{9}})(.*)">
<xsl:matching-substring>
<entry>
<time><xsl:value-of select="regex-group(1)"/></time>
<text><xsl:value-of select="normalize-space(regex-group(2))"/></text>
<text2><xsl:value-of select="normalize-space(regex-group(3))"/></text2>
</entry>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:variable>
<results>
<xsl:for-each-group select="$entries" group-by="time">
<b1>
<xsl:copy-of
select="current-group()[1]/time,current-group()/*[not(self::time)]"/>
</b1>
</xsl:for-each-group>
</results>
</xsl:template>
</xsl:stylesheet>
<results>
<b1>
<time>0707</time>
<text>addd</text>
<text2>abcde</text2>
<text>tdef</text>
<text2>ghidd</text2>
</b1>
<b1>
<time>0715</time>
<text>abcd</text>
<text2>fghi</text2>
</b1>
</results>