Мне нужно отсортировать элементы BillOfMaterialIem на основе значения атрибута billOfMaterialItemID Пример:
<?xml version="1.0" encoding="UTF-8"?>
<PackageData documentCreateDate="2019-10-03" documentModificationDate="2019-10-03">
<Items>
<Item itemID="416664">
<BillOfMaterial>
<BillOfMaterialItem billOfMaterialItemID="417230" />
<BillOfMaterialItem billOfMaterialItemID="417231" />
<BillOfMaterialItem billOfMaterialItemID="416664-01"/>
<BillOfMaterialItem billOfMaterialItemID="110424" />
</BillOfMaterial>
</Item>
</Items>
</PackageData>
Это нормально, чтобы скопировать все и отфильтровать пустые атрибуты:
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:if test="string-length(.)!=0">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
Вот шаблонспецифично для элемента BillOfMaterial:
<xsl:template match="BillOfMaterial">
<xsl:copy>
<xsl:apply-templates select="BillOfMaterialItem" >
<xsl:sort select="@billOfMaterialItemID"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
Элементы отсортированы, как и ожидалось, но в выводе уничтожается идентификация - несмотря на отступ = "да". Я не понимаю причину этого побочного эффекта.
Что мне не хватает?