我需要根据预定值拆分以下 XML文件,对于此示例,假设我想在创建的每个文件中将“Item”节点限制为三(3). 这是一个示例输入XML文件: Items Item TitleTitle 1/Title DueDate01-02-2008/DueDate /Item Ite
这是一个示例输入XML文件:
<Items> <Item> <Title>Title 1</Title> <DueDate>01-02-2008</DueDate> </Item> <Item> <Title>Title 2</Title> <DueDate>01-02-2009</DueDate> </Item> <Item> <Title>Title 3</Title> <DueDate>01-02-2010</DueDate> </Item> <Item> <Title>Title 4</Title> <DueDate>01-02-2011</DueDate> </Item> <Item> <Title>Title 5</Title> <DueDate>01-02-2012</DueDate> </Item> <Item> <Title>Title 6</Title> <DueDate>01-02-2013</DueDate> </Item> <Item> <Title>Title 7</Title> <DueDate>01-02-2013</DueDate> </Item> </Items>
基于阈值3的期望输出将是三个文件,其中两个包含3个“项目”,并且最后一个包含剩余的“项目”,其将是一个.
这是我的XSLT示例,它允许我为每个项目拆分它们,这会产生七个单独的文件,但是,我希望根据每个文件的“项目”节点的特定限制来限制文件的大小.
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xsl:output method="xml" indent="yes" name="xml" /> <xsl:template match="/"> <xsl:for-each select="//Item"> <xsl:variable name="nTitle" select="Title"/> <xsl:variable name="filename" select="concat('Items\',$nTitle,'-','.xml')" /> <xsl:value-of select="$filename" /> <xsl:result-document href="{$filename}" format="xml"> <xsl:copy-of select="."/> </xsl:result-document> </xsl:for-each> </xsl:template> </xsl:stylesheet>这个样式表:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="pItemsNumber" select="3"/> <xsl:template match="Items"> <xsl:for-each-group select="Item" group-adjacent="(position()-1) idiv $pItemsNumber"> <xsl:result-document href="Items\{current-grouping-key()}.xml"> <Items> <xsl:copy-of select="current-group()"/> </Items> </xsl:result-document> </xsl:for-each-group> </xsl:template> </xsl:stylesheet>
输出:
<?xml version="1.0" encoding="UTF-8"?> <Items> <Item> <Title>Title 1</Title> <DueDate>01-02-2008</DueDate> </Item> <Item> <Title>Title 2</Title> <DueDate>01-02-2009</DueDate> </Item> <Item> <Title>Title 3</Title> <DueDate>01-02-2010</DueDate> </Item> </Items> <?xml version="1.0" encoding="UTF-8"?> <Items> <Item> <Title>Title 4</Title> <DueDate>01-02-2011</DueDate> </Item> <Item> <Title>Title 5</Title> <DueDate>01-02-2012</DueDate> </Item> <Item> <Title>Title 6</Title> <DueDate>01-02-2013</DueDate> </Item> </Items> <?xml version="1.0" encoding="UTF-8"?> <Items> <Item> <Title>Title 7</Title> <DueDate>01-02-2013</DueDate> </Item> </Items>
编辑:哎呀!