首页 > 解决方案 > 使用 xslt 将文本转换为 xml 而不提供输入文件名

问题描述

我希望我的文本文件在不提供输入文件名的情况下使用 xslt 转换为 xml 文件。我处理了下面的代码,但它采用了文件名。不提供文件名如何将一些文本转换为 xml,如下面的 Output.xml . 有人可以帮我吗。

输入.txt:

12/34/56/78/9/123/

变换.xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result- 
 prefixes="xs fn">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="pathToFile" select="'file:///c:/Input.txt'" />
<xsl:param name="filename" select="'file:///c:/Output.xml'"/>
<xsl:template match="/">
   <xsl:choose>
      <xsl:when test="unparsed-text-available($pathToFile)">

       <xsl:result-document href="{$filename}" method="xml">
         <xsl:variable name="csv" select="unparsed-text($pathToFile)" />
         <xsl:copy>       
           <File>
              <xsl:value-of select="$csv" />
           </File>
         </xsl:copy> 
      </xsl:result-document>
      </xsl:when>
      <xsl:otherwise>
         <xsl:text>Cannot locate : </xsl:text><xsl:value-of 
         select="$pathToFile" />
      </xsl:otherwise>
      </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

输出.xml:

<?xml version="1.0" encoding="UTF-8"?>
 <File>1/23/456/7/8/14/9/</File>

标签: xmlxslt-2.0

解决方案


目前尚不清楚您使用哪种 XSLT 处理器、如何调用它(命令行、API、IDE 内部),以及您希望像 XSLT 样式表这样的计算机程序以何种方式处理某些输入文件而不提供输入文件名。

通常,在 XSLT 2 及更高版本中,您可以使用命名模板开始处理,而不是提供从与其匹配的模板开始处理的 XML 输入文档。在 XSLT 2 中您必须选择一个(例如<xsl:template match="main">...</xsl:template>),或者在 XSLT 3 中您可以命名它<xsl:template name="xsl:initial-template">...</xsl:template>。然后,您必须使用处理器或 IDE 特定的方法来设置转换以使用该模板。

我不明白您希望如何在不提供文件名的情况下处理文本输入文件。


推荐阅读