Разделить XML-файл на несколько файлов на основе порогового значения

Мне нужно разделить следующий XML-файл на основе заранее определенного значения, в этом примере предположим, что я хочу ограничить узел «Элемент» тремя (3) в каждом созданном файле.

Вот пример входного 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>
5
задан Brian 13 December 2010 в 21:12
поделиться