Единственная реальная разница с вашим предыдущим вопросом ( Удалить префикс из элемента ) заключается в том, что вы больше не имеете дело с корневым элементом, а стали потомком.
Вам просто нужно узнать о шаблоне идентификации , который будет обрабатывать копии существующих элементов до того, как они попадут в тот, который вам нужно изменить.
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
Тогда вместо того, чтобы иметь шаблон, соответствующий корневому элементу, у вас есть шаблон, соответствующий узлу, к которому вы хотите добавить нового потомка:
<xsl:template match="ns:sap_order_status">
<xsl:copy>
<xsl:element name="{local-name()}">
<xsl:apply-templates />
</xsl:element>
</xsl:copy>
</xsl:template>
Префикс ns:
будет объявлен в элементе xsl:stylesheet
.
Попробуйте это XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:ns="http://orders.com">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="ns:sap_order_status">
<xsl:copy>
<xsl:element name="{local-name()}">
<xsl:apply-templates />
</xsl:element>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>