Java 中的 Saxon:用于 CSV 到 XML 的 XSLT

2023-11-30

主要是从这个问题继续:XSLT:CSV(或平面文件或纯文本)到 XML

所以,我从这里得到了一个 XSLT:http://andrewjwelch.com/code/xslt/csv/csv-to-xml_v2.html

它将 CSV 文件转换为 XML 文档。当在命令行上与以下命令一起使用时,它会执行此操作:

java -jar saxon9he.jar -xsl:csv-to-xml.csv -it:main -o:output.xml

所以现在问题变成:我该如何在我的 Java 代码中做到这一点?

现在我的代码如下所示:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
StreamSource xsltSource = new StreamSource(new File("location/of/csv-to-xml.xsl"));
Transformer transformer = transformerFactory.newTransformer(xsltSource);
StringWriter stringWriter = new StringWriter();
transformer.transform(documentSource, new StreamResult(stringWriter));
String transformedDocument = stringWriter.toString().trim();

(The Transformer是一个实例net.sf.saxon.Controller.)

命令行上的技巧是指定“-it:main”以直接指向 XSLT 中的命名模板。这意味着您不必为源文件提供“-s”标志。

Java 端又出现了问题。我将在哪里/如何指定这个“-it:main”?这样做不会破坏其他不需要指定的 XSLT 吗?我是否必须将每个 XSLT 文件中的每个模板命名为“main”?给定 Transformer.transform() 的方法签名,我have来指定源文件,那么这是否会破坏我在解决这个问题方面所取得的所有进展?

Edit:我发现 s9api 隐藏在 saxon9he.jar 中,如果有人在寻找的话。


您正在使用 JAXP API,它是为 XSLT 1.0 设计的。如果您想利用 XSLT 2.0 功能,例如在命名模板上启动转换的能力,我建议您使用 s9api 接口,它为此目的设计得更好。

但是,如果您有大量现有的 JAXP 代码并且不想重写它,通常可以通过将 JAXP 对象向下转换为底层 Saxon 实现类来实现您想要的目的。例如,您可以将 JAXP Transformer 转换为 net.sf.saxon.Controller,这样您就可以访问controller.setInitialTemplate();当调用transform()方法时,只需提供null作为Source参数。

顺便说一句,如果您正在编写需要 2.0 处理器的代码,那么我不会使用 TransformerFactory.newInstance(),它将为您提供在类路径上找到的任何旧 XSLT 处理器。使用 new net.sf.saxon.TransformerFactoryImpl() 代替,它 (a) 更健壮,(b) 速度更快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的 Saxon:用于 CSV 到 XML 的 XSLT 的相关文章

随机推荐

  • 如何在 php 中进行 geoip 查找?

    我见过的所有教程都指向类似的功能geoip record by name 我总是收到此错误 Fatal error Call to undefined function geoip record by name in home
  • 将折扣百分比添加到 Woocommerce 中的可变产品价格范围

    使用 Woocommerce 我使用以下代码成功地从产品档案页面中删除了销售徽章和价格 Remove Sales Flash add filter woocommerce sale flash woo custom hide sales f
  • Android - 无法打开 [SQL] 数据库错误

    我目前正在为 Android SDK 制作一个应用程序 它允许我打开 复制应用程序外部已经制作的数据库 我无法让我的程序读取数据库中的表 遵循一些建议question我之前发布过 我写了一个类 可以直接调用SQLiteDatabase 并使
  • 下拉列表为默认值

    有没有一种简单的方法可以将 Please select 默认选项添加到 MVC 3 中的 DropDownListFor 中 所以 我做了这样的事情 Html DropDownListFor model gt model Dessert n
  • 在Ajax Jquery函数中添加if else函数

    是否可以在我的 JS 中添加其他 else 函数 如下所示 如果响应 成功重定向到主页如果响应 失败重定向到失败 ajax type POST url action data form data success function respo
  • 确定具有函数依赖关系的候选键很简单

    设 R A B C D E 为关系模式 F A C B D C E E A 查找所有候选键 我相信由于无法映射 该集合中不存在 CK B 或 D 到除 B gt D 之外的任何其他关系 这是否意味着没有候选密钥 尽管我能够将 A 映射到除
  • Moz RTCPeerConnection() 上 FireFox 中的 NS_ERROR_UNEXPECTED

    我在 webrtc 1 1 视频通话应用程序中使用adapter js 它在 Google Chrome 上运行良好 双方都可以看到彼此的视频并可以听到音频 但是 当我在 FireFox 上运行相同的应用程序时 我在控制台上收到来自 ada
  • Google Chrome 中的 getElementById 问题

    我有这条简单的线 alert window parent frames 0 document getElementById textToSearch value 我有 2 个框架 第一个框架是一个 id 为 textToSearch 的文本
  • Java 8 int 数组映射

    我想转换整型数组 to Map
  • 检查浏览器是否支持 HTML5 时间选择器

    我用 JavaScript 构建了一个时间掩码 它非常适合 PC Mac iPhone 和 iPad 但在大多数 Android 手机中无法一致工作 我不想详细解释为什么此功能无法一致工作 在 Android 中 所以我禁用它 对于三星来说
  • 使用神经网络和 ReLU 逼近正弦函数

    我正在尝试用神经网络 Keras 来近似正弦函数 是的 我读过相关的帖子 Link 1 Link 2 Link 3 使用具有 sigmoid 的四个隐藏神经元和具有线性激活的输出层效果很好 但也有一些设置提供的结果对我来说似乎很奇怪 由于我
  • 如何从 Javascript 设置 WebSocket Origin 标头?

    我正在尝试使用 javascript 从本地发出 websocket 请求test dev页面到在 ip 上运行的服务器123 123 123 123代表test com 请求通过 但是123 123 123 123服务器看到Origin
  • 使用 DateTime.TryParseExact 解析非标准日期格式

    您好 我正在尝试解析 1012012 2012 年 1 月 1 日 等日期字符串 阅读 Api 它说要使用 d d 其中日期没有前导 0 无法让它适用于像 1012012 这样的日期 尝试使用 d MMM YYYY 表示 2012 年 1
  • iframe 内的 Facebook 表单应用程序丢失 Windows 平台中 Safari 浏览器的 cookie

    我有一个使用 iframe 构建的 Facebook 应用程序 除了 Windows 平台上的 Safari 之外 它在大多数现代浏览器上都可以正常工作 在 Safari Windows 平台上 当用户从初始表单页面移动到带有问题的第二页时
  • SSIS 脚本任务 COMException / FileNotFoundException 错误

    您好 我有以下 VBS 如果我将其放入 vbs 文件并运行它 则运行不会出现任何问题 Dim objshell Set objshell CreateObject Shell Application objshell NameSpace C
  • 使用gdb检查寄存器的值

    如何查看寄存器保存的值 我有以下装配线 mov 0x8 rax rax cpm ebx rax 使用命令 gdb p x ebx gdb p x rbx 3 0xb 我得到了存储在该寄存器中的值 但是 当我尝试查看内存位置 rax 中存储的
  • 如何使用 Ajax/JavaScript (Rails) 动态更新此投票计数器?

    我建立了一个简单的投票系统 votes controller rb class VotesController lt ApplicationController def vote up post Post find params id vo
  • 将列表环绕为切片操作

    考虑以下简单的 python 代码 gt gt gt L range 3 gt gt gt L 0 1 2 我们可以按如下方式对该数组进行切片 gt gt gt L 1 3 1 2 有没有办法通过向左移动来环绕上面的数组 1 2 0 通过简
  • OpenGL 中的视线矢量

    我遇到的问题是我无法在 OpenGL 中获得 视线 矢量 我做了一些研究 发现它应该是变换后的 Z 向量 但它不想工作 我有这段代码来检索块的速度 我希望它从 相机 向前移动 但它始终与相机无关 但与渲染的世界相比始终以相同的方式移动 GL
  • Java 中的 Saxon:用于 CSV 到 XML 的 XSLT

    主要是从这个问题继续 XSLT CSV 或平面文件或纯文本 到 XML 所以 我从这里得到了一个 XSLT http andrewjwelch com code xslt csv csv to xml v2 html 它将 CSV 文件转换