根据标签拆分4GB xml
我一直在尝试不同的解决方案来实现这一点。我有以下XML结构根据标签拆分4GB xml
<fullListing>
<employeeList>
<employee>
<name>emp1</name>
<id>1</id>
</employee>
<employee>
<name>emp2</name>
<id>2</id>
</employee>
<employee>
<name>emp3</name>
<id>3</id>
</employee>
</employeeList>
<departmentList>
<department>
<name>dept1</name>
<id>1</id>
</department>
<department>
<name>dept2</name>
<id>2</id>
</department>
<department>
<name>dept3</name>
<id>3</id>
</department>
</departmentList>
<regionData>
<region>
<zip>123321</zip>
<abc>aa</abc>
</region>
<region>
<zip>223311</zip>
<abc>bb</abc>
</region>
<region>
<zip>112233</zip>
<abc>cc</abc>
</region>
<zipmapping>
<zip>111111</zip>
<regionId>1</regionId>
</zipmapping>
<zipmapping>
<zip>222222</zip>
<regionId>2</regionId>
</zipmapping>
<zipmapping>
<zip>333333</zip>
<regionId>3</regionId>
</zipmapping>
<zipmapping>
<zip>444444</zip>
<regionId>4</regionId>
</zipmapping>
<areaMapping>
<zip>121212</zip>
<regionId>12</regionId>
</areaMapping>
<areaMapping>
<zip>131313</zip>
<regionId>13</regionId>
</areaMapping>
<areaMapping>
<zip>141414</zip>
<regionId>14</regionId>
</areaMapping>
</regionData>
</fullListing>
现在我需要一个有效的解决方案上面的XML拆分为多个小文件
所以我需要在最后的是:
<employeeList> --> emplist file
<departmentList> --> deptlist file
等上。
任何建议/想法?
假设一个XSLT 3.0处理器像撒克逊9.6或9.7 EE支持streaming你可以写的根元素的任何儿童使用
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
exclude-result-prefixes="xs math"
version="3.0">
<xsl:mode streamable="yes"/>
<xsl:template match="/*/*">
<xsl:result-document href="{local-name()}.xml">
<xsl:copy-of select="."/>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
使用<xsl:result-document href="{local-name()}.xml">
这接近一个单独的文件,如果没有才起作用同名的子元素。
如果有多个具有相同名称的元素,您可以使用'href =“{local-name()} {position()}。xml”' –
@MichaelKay,是的,这将是一种获取唯一URI的方法结果文件但是编号可能有点奇怪('foo1.xml','bar2.xml','foo3.xml'),所以我宁愿设置一个累加器来保存一个按照元素名称计数的映射,这样我们会得到'foo1.xml','bar2.xml','foo2.xml'等。 –
自从我这样做了很长一段时间以来,它就像继承 xsl:template>',并在[将XML文件(InputStream)传递给XSLT的答案中使用TransformerFactory以避免在XSLT javax.xml中使用Document](http://stackoverflow.com/a/26172836/6768037)? –
因此,对于任何类型的根元素的子元素,你想创建一个单独的文件? –