Мне нужно разбить следующий XML-файл на основе заданного значения, для этого примера можно предположить, что я хочу ограничить узел «Item» тремя (3) в каждом файл создан.Разделить XML-файл на несколько файлов на основе порогового значения
Вот пример входного 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 «Item», и последний один, содержащий остальные «предметы», которые будут едины.
Вот пример моего XSLT, который позволяет мне разделить их на каждый элемент, что приводит к семи отдельным файлам, однако я хочу ограничить размер файла на основе определенного предела «Item», узел на файл.
<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>
Хороший вопрос, +1. См. Мой ответ для простого решения. –