Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用xslt将文本转换为xml_Xml_Xslt_Ascii - Fatal编程技术网

使用xslt将文本转换为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解析器中提供的未解析文本函数。这些允许您读取本质上是字符串结果的文件。在这里,您有几个用于解

是否可以使用xslt将文本文件转换为xml。我知道我们可以从xml转换为文本,这一点我在前面已经做过了。但是我们有一个文本文件,需要使用xslt将其结构化为xml

这可能吗

更新:(下面是我需要解析为xml的文本文件)

XML:


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>