Мне нужно дублировать родительский элемент для каждого экземпляра дочернего элемента, но я не хочу включать братьев и сестер дочернего элемента в вывод. Затем я хотел бы отсортировать родителей на основе поля в дочернем узле.
Пример ввода:
<Customer>
<a/>
<b/>
<Market>
<MarketNumber>100</MarketNumber>
</Market>
<Market>
<MarketNumber>200</MarketNumber>
</Market>
<c/>
</Customer>
<Customer>
<a/>
<b/>
<Market>
<MarketNumber>100</MarketNumber>
</Market>
<c/>
</Customer>
Желаемый результат (3 клиента с одним рынком каждый):
<Customer>
<a/>
<b/>
<Market>
<MarketNumber>100</MarketNumber>
</Market>
<c/>
</Customer>
<Customer>
<a/>
<b/>
<Market>
<MarketNumber>100</MarketNumber>
</Market>
<c/>
</Customer>
<Customer>
<a/>
<b/>
<Market>
<MarketNumber>200</MarketNumber>
</Market>
<c/>
</Customer>
Я решил это, выбрав все рынки и скопировав его родительские элементы вручную, но хотел бы сделать это, не называя их (его 33 элемента в родительском узле). Проблема в том, что я не могу выбрать "../." потому что тогда я также копирую рынок братьев и сестер.
<xsl:apply-templates select="Customer/Market">
<xsl:sort select="MarketNumber" data-type="number" order="ascending"/>
</xsl:apply-templates>
...
<xsl:template match="Market">
<!--Duplicate all customer data for each market-->
<Customer>
<xsl:copy-of select="../a"/>
<xsl:copy-of select="../b"/>
<xsl:copy-of select="."/> <!--Current market -->
<xsl:copy-of select="../c"/>
</Customer>
</xsl:template>
Я подозреваю, что это можно решить, скопировав родительский элемент, кроме Market, а затем скопировав Market с "." как я делаю выше, но я не могу понять, как .. Любые подсказки приветствуются! Другие решения также приветствуются, но они также должны обрабатывать сортировку.
Спасибо! Ричард