带有数据库查询的 XSLT

发布于 2024-11-03 13:43:54 字数 292 浏览 3 评论 0原文

我在 Java 应用程序中进行 XML 转换已经有一段时间了,但我仍然不清楚选项是什么,以及从数据库读取记录并将其插入到转换后的输出文件中的最佳选项是什么。

到目前为止,我一直在做的是使用 xQuery 查询 Oracle 数据库,结果给了我一个节点集。然后,我将此结果作为参数传递给转换器,并在转换期间查询该参数以将数据插入到适当的节点中。

这是最好的方法吗?我的基础语言还是 Java。获得相同结果的其他选择是什么?

另外我认为值得一提的是,大多数情况下数据库查询都是基于源 XML 文件的内容。

谢谢

I've been doing XML transformation for a while in my Java application and I'm still not clear what the options are and what the best option is to read records from a database and insert it in my transformed output file.

What I've been doing so far is querying an Oracle database with xQuery that gave me a nodeset as a result. I then passed this result as a parameter to the transformer and queried that parameter during the transformation to insert data into the appropriate nodes.

Is this the best way of doing it though? My base language again is Java. What would be the other options to get the same result?

Also I think it's worth mentioning that most of the times the db query is based on the content of the source XML file.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

段念尘 2024-11-10 13:43:58

一种可能性是在 XSLT 脚本中实例化 Java 对象;

    <!-- Connection to the data provider. -->
    <xsl:variable name="provider" xmlns:java="http://xml.apache.org/xalan/java"
        select="java:my.sample.DataProvider.getInstance()" />

稍后在脚本中使用它提供数据:

    <xsl:template match="node">
        <xsl:variable name="mydata" xmlns:java="http://xml.apache.org/xalan/java"
                    select="java:getdata($provider,  string(@attr))" />

这将在 getInstance() 方法创建的对象上调用 getData(String) 方法>my.sample.DataProvider 类。

您可以使用这样的设置从缓存中获取值(例如,您尝试在当前设置中作为参数传递的查询结果),或者在执行转换时执行查询(防止查询未访问的数据)转换。)

One possibility is to instantiate a Java object in your XSLT script;

    <!-- Connection to the data provider. -->
    <xsl:variable name="provider" xmlns:java="http://xml.apache.org/xalan/java"
        select="java:my.sample.DataProvider.getInstance()" />

Using it to provide the data later on in the script:

    <xsl:template match="node">
        <xsl:variable name="mydata" xmlns:java="http://xml.apache.org/xalan/java"
                    select="java:getdata($provider,  string(@attr))" />

This would call the method getData(String) on the object created by the static getInstance() method on your my.sample.DataProvider class.

You can use a setup like this to get values from a cache (for instance the query results you try to pass as parameter in your current setup), or to execute queries while transform is executed (preventing queries to data that is not visited by the transform.)

以为你会在 2024-11-10 13:43:57

您是否看过 Saxon SQL 扩展,特别是 < ;sql:query> 扩展元素?

Have you looked at the Saxon SQL extensions, in particular at <sql:query> extension element?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文