Побочный эффект от xsl: sort на отступ - PullRequest
0 голосов
/ 09 октября 2019

Мне нужно отсортировать элементы 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>

Элементы отсортированы, как и ожидалось, но в выводе уничтожается идентификация - несмотря на отступ = "да". Я не понимаю причину этого побочного эффекта.

Что мне не хватает?

1 Ответ

0 голосов
/ 10 октября 2019
<xsl:strip-space elements="*"/> makes it work

Спасибо, michael.hor257k

...