如何在撒克逊人中使用DirectoryCollection

时间:2018-12-07 06:40:45

标签: java saxon

试图在saxon中创建目录集合。如何将xml文件添加到此集合中,并在其上运行xquery。

DirectoryCollection dirColl = 
                new DirectoryCollection(saxonConfig, "file:///C:/Users/sasolkar/Desktop/collectTest/", new File("file:///D:/table%20linkbase%20conformance%20suite%20original/table-linkbase-conf-2015-08-12/conf/tests/1000-rule-node/1070-rule-node-occ-rule/"), null);

        Resource r  = dirColl.makeResource(saxonConfig, "file:///D:/table%20linkbase%20conformance%20suite%20original/table-linkbase-conf-2015-08-12/conf/tests/1000-rule-node/1070-rule-node-occ-rule/occ-fragment-overridden-table.xml");

任何人都可以告诉我创建内存中的xml文件集合以对其执行xquery的过程。

1 个答案:

答案 0 :(得分:0)

DirectoryCollection类并不是真的打算像这样使用。当您使用collection()函数时,Saxon会调用已注册的CollectionFinder(默认为其自己的StandardCollectionFinder

StandardCollectionFinder将查看传递给collection()函数的URI,以查看它是否对应于文件存储中的目录名;如果是这样,它将创建一个DirectoryCollection并将其传递回collection()函数。然后,集合的内容与目录中找到的文件相对应。如果您编写自己的CollectionFinder,则可以根据需要执行相同的操作,也可以根据需要创建其他类型的ResourceCollection

在我看来,似乎您正在尝试创建不在同一目录中的所有文件集合,因此您想要使用ResourceCollection以外的某种DirectoryCollection。我认为ResourceCollection的任何标准实现都不能满足您的要求,因此您可以直接实现或通过扩展AbstractResourceCollection来实现自己的实现。

但是我不知道最好退后一步,清楚地了解您要做什么。根本不使用集合可能会更容易。例如,您可以编写一个查询,该查询采用一个参数(外部变量),该参数是URI序列,然后使用doc()函数获取该参数;或者,您也可以从外部解析文档,并提供一系列文档节点作为查询的参数。