Используя XSLT, попытайтесь представить стоящую перед вами задачу как набор шаблонов или правил, которым вы должны соответствовать, и действия, которые необходимо предпринимать при каждом обнаружении такого шаблона. Обычно вы можете позволить среде выполнения беспокоиться о циклах и т. Д., Чтобы обнаружить шаблоны.
В вашем конкретном случае вы описали два шаблона, для которых требуется особая логика. Каждый раз, когда появляется элемент Article
, вы хотите применить правило, чтобы изменить его имя на order
.
Каждый раз, когда элемент line
встречается как дочерний элемент Article
, заменяйте его на order_line
. Для любого другого шаблона вы просто хотите скопировать содержимое, как оно было в исходном документе:
<!-- Match element Article, and whenever it's encountered, insert an 'order' element, and copy the contents of Article -->
<xsl:template match="Article">
<order> <xsl:apply-templates/> </order>
</xsl:template>
<!-- Match element 'line', and whenever it's encountered, insert an 'order_line' element, and copy the contents -->
<xsl:template match="Article/line">
<order_line> <xsl:apply-templates/> </order_line>
</xsl:template>
<!-- Match any other element we haven't specified explicity, and copy it verbatim -->
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>