gpt4 book ai didi

java - 根据元素计数使用 XSLT 2.0 拆分 XML 文件

转载 作者:行者123 更新时间:2023-12-02 04:03:03 24 4
gpt4 key购买 nike

具有以下结构的巨大 XML:

<?xml version="1.0" encoding="UTF-8"?>
<productall>

<product type="electronics" date="1-1-2016">

<type name"Androidbased">

<product> InStock </product>

</type>

</product>

<product type="cloths" date="1-12-2008">

<type name"Jeans">

<product> InStock </product>

</type>

</product>

<product type="bags" date="1-12-2008">

<type name"FF">

<product> InStock </product>

</type>

</product>


</productall>

每种产品类型都有数千条记录,例如电子产品有 2000 条记录,布料有 8000 条记录。

我想将此 XML 文件拆分为多个 XML,每个 XML 包含 1000 条记录,无论类型如何!

我已经使用基于 java 和 saxon 9 的 XSLT 2.0 来分割它,但它不起作用,这是我到目前为止所做的:

java -jar sax.jar Productall.xml split.xslt

分割.xslt

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="productall" select="1000"></xsl:param>
<xsl:template match="/productall/product[@type]">
<xsl:for-each-group select="product" group-adjacent="(position()-1) idiv $productall">
<xsl:result-document href="part.{current-grouping-key()}.xml">
<productall>
<xsl:copy-of select="current-group()"></xsl:copy-of>
</productall>
</xsl:result-document>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>

结果以非 XML 格式打印在终端屏幕上,并且不会生成 .XML 文件。不知道命令语法或 XSLT 文件的内容有什么问题?

最佳答案

这里的主要问题是您的模板与 product 元素匹配,这意味着当您执行 xsl:for-each-group 时,您将位于 产品元素。然后您选择 product 元素,是的,这些元素不是当前元素的子元素,而是 type 元素的子元素。所以,你需要这样做......

<xsl:for-each-group select="type/product" group-adjacent="(position()-1) idiv $productall">

但是,您说您想要多个 XML,每个 XML 包含 1000 条记录,无论类型如何,但当前的 XSLT 分别对每个主要产品执行此操作,这意味着您将获得重复的文件名。

也许您应该在文件名中包含主要产品类型?

<result-document href="part.{../../@type}.{current-grouping-key()}.xml">

或者,如果您确实想要这样做,无论主要产品类型如何,您应该更改您的主模板以匹配productall

尝试这个 XSLT

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="productall" select="1000"></xsl:param>
<xsl:template match="/productall">
<xsl:for-each-group select="product/type/product" group-adjacent="(position()-1) idiv $productall">
<xsl:result-document href="part.{current-grouping-key()}.xml">
<productall>
<xsl:copy-of select="current-group()"></xsl:copy-of>
</productall>
</xsl:result-document>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>

关于java - 根据元素计数使用 XSLT 2.0 拆分 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34686231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com