Я начинающий XSLT-разработчик. Меня попросили исправить проблему в проекте, в котором исходного разработчика больше нет с нами. В XSLT есть цикл for-each
, использующий key
и count
.
<xsl:for-each select="ns0:BOM[count(. | key('subsat', ns0:BomText01)[1]) = 1][ns0:BomText01]">
...
Это key
:
<xsl:key name="subsat" match="ns0:Parts/ns0:BOM[ns0:FindNum!='0']" use="ns0:BomText01" />
В трансформируемом XML-файле есть два одноуровневых узла, которые представляют подчасти:
<ns0:BOM referentId="10000:65091335:65359080">
<ns0:BomText01>3069260-303-SUB0027</ns0:BomText01>
<ns0:ItemNumber>My_part_1</ns0:ItemNumber>
<ns0:ItemType>Part</ns0:ItemType>
<ns0:Qty>67</ns0:Qty>
</ns0:BOM>
<ns0:BOM referentId="10000:65102551:86713230">
<ns0:BomText01>3069260-303-SUB0027</ns0:BomText01>
<ns0:ItemNumber>My_part_2</ns0:ItemNumber>
<ns0:ItemType>Part</ns0:ItemType>
<ns0:Qty>67</ns0:Qty>
</ns0:BOM>
Однако цикл выбирает только первый узел (My_part_1
). Я подозреваю, что это из-за count=1
, но я действительно не знаю. И я не знаю, как его изменить. Идеи? Если мне нужно включить больше данных, дайте мне знать.
key
кажется недействительным. Это должно быть допустимое полное имя — оно не должно начинаться с цифры. Вы вообще умеете его запускать? Какой процессор вы используете? - person helderdarocha   schedule 17.06.2014count
с ключом фактически используется для выбора уникальных значений, поэтому в вашем примере будет выбрано только первое, поскольку оба имеют одинаковыеBomText01
. - person helderdarocha   schedule 17.06.2014