我有大量的XML文档,如下所示:
<root xmlns="urn:foo" xmlns:bar="urn:bar">
<Entity>
<bar:field>Data</bar:field>
<bar:other>Other data</bar:other>
<bar:more>More data</bar:more>
</Entity>
<Entity>
<bar:field>Data</bar:field>
<bar:other>Other data</bar:other>
<bar:more>More data</bar:more>
</Entity>
</root>
每个根节点下有多达1000个实体节点。如果可能的话,我想将每个文件分割成自己的文档,而不写入磁盘。
我熟悉XSLT2.0,并且知道我可以使用xsl:result使用Saxon完成这一任务,但在所有情况下都会写入磁盘,不是吗?是否有任何方法以字符串的形式截取输出?我使用的是Java,原始数据是REST调用的结果,所以它是作为一个InputStream传入的,我目前正在编写一个字符串。
发布于 2014-07-22 00:43:29
Saxon 9允许您提供带有http://saxonica.com/documentation/index.html#!javadoc/net.sf.saxon.lib/OutputURIResolver的http://saxonica.com/documentation/index.html#!javadoc/net.sf.saxon/Controller@setOutputURIResolver方法,然后该方法可以以自定义的方式处理任何result-document
,例如,将其写入内存中的StringWriter而不是磁盘上的文件。
发布于 2014-07-11 16:25:16
如何将其解析为文档,在其上运行/root/Entity
Xpath表达式,循环遍历NodeSet,并将每个节点采用为一个新的空文档?
发布于 2014-07-11 12:42:48
您可以编写一个简单的XSLT2.0转换,并在Java程序中对原始文件运行无数次,并在Java程序中捕获Saxon的标准输出。
如何从Java调用另一个程序:使用ProcessBuilder并运行流程。如有要求,请提供详细资料。
另一种选择是使用JAXB创建对象树、提取实体元素、创建一个小对象树并将其传递给字符串。这样会快得多。
https://stackoverflow.com/questions/24705657
复制相似问题