Имам няколко xml файла със структура като тази:
1.xml
<root>
<includeFile name="2.xml" />
<a>
<items>
<item id="1" />
<item id="2" />
</items>
<items>
<item id="3" />
<item id="4" />
<item id="5" />
</items>
</a>
<b>
<items>
<item id="6" />
<item id="7" />
</items>
<items>
<item id="8" />
</items>
</b>
<c>
<items>
<item id="9" />
<item id="10" />
</items>
</c>
Всички тагове a, b и c не са задължителни. Трябва да анализирам файл за елементи и след това рекурсивно да анализирам файла, посочен в етикета за включване. Опитвам се да събера всички тези елементи в един файл под съответните им родители (a, b и c) с помощта на XSLT. Мога да получа всички елементи от всички файлове, но проблемът ми е, че не мога да ги комбинирам под единични родителски тагове. Опитах да използвам, но те не изглеждат в състояние да решат проблема ми. Моят XSLT изглежда така (този е непълен)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xslt">
<xsl:output method="xml" indent="yes" xalan:indent-amount="4" />
<xsl:template match="/">
<xsl:call-template name="fileTemp" />
<xsl:for-each select="root/includeFile">
<xsl:value-of select="@name" />
<xsl:apply-templates select="document(@name)" />
</xsl:for-each>
</xsl:template>
<xsl:variable name="mi" />
<xsl:template name="fileTemp">
<xsl:variable name="mi" select="root/items" />
</xsl:template>
</xsl:stylesheet>
Как мога да събера всички елементи в променлива или нещо в рамките на XSLT, докато анализирам различни XML и след това прилагам трансформациите си върху него?
Например: анализиране на 1.xml, което ще включва 2.xml като
<root>
<a>
<items>
<item id="100" />
<item id="200" />
</items>
</a>
<b>
<items>
<item id="80" />
</items>
</b>
<c>
<items>
<item id="90" />
</items>
</c>
...трябва да произвежда
<root>
<a>
<items>
<item id="1" />
<item id="2" />
</items>
<items>
<item id="3" />
<item id="4" />
<item id="5" />
</items>
<items>
<item id="100" />
<item id="200" />
</items>
</a>
<b>
<items>
<item id="6" />
<item id="7" />
</items>
<items>
<item id="8" />
</items>
<items>
<item id="80" />
</items>
</b>
<c>
<items>
<item id="9" />
<item id="" />
</items>
<items>
<item id="90" />
</items>
</c>
</root>
xsl:output
, а Xalan прилага само XSLT 1.0. Кой процесор всъщност използвате тук? - person Ian Roberts   schedule 26.02.2015