首页 > Java > java教程 > 正文

读取XSLT样式表中的CSV文件

DDD
发布: 2025-09-26 18:03:01
原创
431人浏览过

读取xslt样式表中的csv文件

本文旨在指导开发者如何在XSLT样式表中读取CSV文件,并将其转换为XML格式。我们将重点介绍使用unparsed-text-available()和unparsed-text()函数检查文件是否存在并读取其内容,同时提供一种通过Java传递文件URI作为参数的有效方法,解决文件路径问题。

在XSLT中读取外部文件,特别是CSV文件,是数据转换和处理的常见需求。 Saxon 9 提供了 unparsed-text-available() 和 unparsed-text() 函数,允许我们检查文件是否存在并读取其内容。 然而,在实际应用中,特别是从Java等外部程序调用XSLT时,文件路径的处理可能会遇到一些问题。

使用 unparsed-text-available() 和 unparsed-text() 函数

unparsed-text-available($pathToCSV) 函数用于检查指定路径的文本文件是否存在,并返回一个布尔值。unparsed-text($pathToCSV) 函数则用于读取指定路径的文本文件,并将其内容作为字符串返回。

以下是一个基本的 XSLT 示例,演示如何使用这两个函数读取 CSV 文件:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:param name="pathToCSV"/>

  <xsl:template match="/">
    <root>
      <xsl:choose>
        <xsl:when test="unparsed-text-available($pathToCSV)">
          <xsl:variable name="csv" select="unparsed-text($pathToCSV)"/>
          <xsl:message>CSV file content: <xsl:value-of select="$csv"/></xsl:message>
          <!-- 在这里对 CSV 内容进行解析和转换 -->
        </xsl:when>
        <xsl:otherwise>
          <error>Cannot locate: <xsl:value-of select="$pathToCSV"/></error>
        </xsl:otherwise>
      </xsl:choose>
    </root>
  </xsl:template>

</xsl:stylesheet>
登录后复制

在这个例子中,pathToCSV 是一个 XSLT 参数,用于指定 CSV 文件的路径。xsl:choose 元素根据 unparsed-text-available() 函数的返回值来决定是否读取 CSV 文件。如果文件存在,unparsed-text() 函数将读取其内容并将其存储在 $csv 变量中。

文件路径问题与解决方案

在使用 unparsed-text-available() 和 unparsed-text() 函数时,一个常见的问题是文件路径的解析。特别是当从Java等外部程序调用XSLT时,相对路径可能会导致问题。

小绿鲸英文文献阅读器
小绿鲸英文文献阅读器

英文文献阅读器,专注提高SCI阅读效率

小绿鲸英文文献阅读器 199
查看详情 小绿鲸英文文献阅读器

一个有效的解决方案是使用 java.io.File 类的 toURI() 方法生成一个 file: URI,并将该 URI 作为 $pathToCSV 样式表参数传递给 XSLT。

以下是一个 Java 示例:

import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerConfigurationException;

public class XSLTProcessor {

    public static void main(String[] args) {
        try {
            File csvFile = new File("C:/Dev/mydata.csv"); // 替换为你的 CSV 文件路径
            String pathToCSV = csvFile.toURI().toString();

            File stylesheet = new File("transform.xsl"); // 替换为你的 XSLT 文件路径
            StreamSource stylesource = new StreamSource(stylesheet);
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer transformer = tf.newTransformer(stylesource);

            transformer.setParameter("pathToCSV", pathToCSV);

            File xmlInput = new File("input.xml"); //可以是一个空的XML文件
            StreamSource xmlSource = new StreamSource(xmlInput);

            StreamResult result = new StreamResult(new File("output.xml"));

            transformer.transform(xmlSource, result);

            System.out.println("Transformation completed.");

        } catch (TransformerConfigurationException e) {
            System.err.println("Transformer configuration error: " + e.getMessage());
        } catch (TransformerException e) {
            System.err.println("Transformation error: " + e.getMessage());
        }
    }
}
登录后复制

在这个 Java 示例中,我们首先创建一个 File 对象,指向 CSV 文件。然后,我们使用 toURI().toString() 方法将其转换为 file: URI。最后,我们将该 URI 作为参数传递给 XSLT 转换器。

注意事项

  • 确保 Saxon 9 已正确安装并配置。
  • 在使用 toURI() 方法时,请注意处理文件路径中的特殊字符,例如空格和反斜杠。
  • 在 XSLT 中,可以使用 xsl:message 元素来输出调试信息,例如 $pathToCSV 的值,以便更好地了解文件路径解析的过程。
  • 确保XSLT文件和CSV文件具有相应的读取权限。

总结

通过使用 unparsed-text-available() 和 unparsed-text() 函数,以及通过 Java 将文件 URI 作为参数传递给 XSLT,我们可以有效地在 XSLT 样式表中读取 CSV 文件并进行转换。 这种方法可以避免文件路径解析的问题,并提高 XSLT 转换的可靠性。 记住在实际应用中,需要根据具体情况调整文件路径和参数传递方式。

以上就是读取XSLT样式表中的CSV文件的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号