Надеюсь, еще не поздно.
1. В GetList передавать в список необходимых полей " * " не очень целесообразно - если нужно одно свойство, то хватит ID и IBLOCK_ID (важно! для инфоблоков 2.0). Ну и PROPERTY_CML2_ARTICLE, конечно.
2. Значение свойства должно быть в $arElement["PROPERTY_CML2_ARTICLE_VALUE"].
3. Так как вы делаете GetNext(), а не Fetch(), то в значениях $arElement уже обработаны htmlspecialchars (кстати на современном Битрикс рекомендуется htmlspecialcharsbx в связи с особенностями PHP 5.7+ иметь свои особенные взгляды на кодировку текстов). Все значения массива, если вы ещё и ' * ' в список полей передали. Небезопасные значения остаются в элементах массива, ключи в которых начинаются на " ~ ". Например, $arElement['~NAME'].
<?php $arElement = CIBlockElement::GetList( array(), array( 'IBLOCK_ID' => 1, 'ID' => $arBasket['PRODUCT_ID'] ), false, false, array( 'ID', 'IBLOCK_ID', 'PROPERTY_CML2_ARTICLE') )->Fetch(); ?> <td><?echo htmlspecialchars($arElement["PROPERTY_CML2_ARTICLE_VALUE "]);?></td>
<tr valign="top">
<td bgcolor="#ffffff" style="border: 1pt solid #000000; border-right:none; border-top:none;">
<?echo $n++ ?>
</td>
<?
$arElement = CIBlockElement::GetList(
array(),
array(
'IBLOCK_ID' => 6,
'ID' => $arBasket['PRODUCT_ID']
), false, false, array(
'ID',
'IBLOCK_ID',
'PROPERTY_CML2_ARTICLE'))->Fetch();
?>
<td bgcolor="#ffffff" style="border: 1pt solid #000000; border-right:none; border-top:none;"><?echo htmlspecialchars($arElement["PROPERTY_CML2_ARTICLE_VALUE"]);?></td>
Поменял IBLOCK_ID на свой (ID каталога у меня 6). Пусто
print_r($arElement) - ничего не выводит. Значит он не получает это значение?