Как оказалось, это полностью проблема xsl.
Xsl процессор выбирает шаблон для использования на основе атрибутов "match" и "mode". Когда два или более шаблонов совпадают, один из них выбирается по приоритету. По умолчанию существует три уровня приоритетов, которые назначаются в зависимости от того, насколько конкретно ваше соответствие.
С http://www.codetoad.com/xml/xslt8.asp:
Шаблоны, которые соответствуют классу узлов, например *, который соответствует всем
элементы, присваиваются неявным
приоритет -0,5
Шаблоны, которые соответствуют узлам в соответствии с их именем, например, Символ,
который соответствует элементам,
присваивается неявный приоритет 0
Шаблоны, которые соответствуют узлам в соответствии с их контекстом, такие как
CastMember / Character, который соответствует
элементы, чьим родителем является
элемент, присваивается
неявный приоритет 0,5
При назначении приоритетов на основе
шаблоны, не имеет значения, как
Конкретная контекстная информация:
если вы укажете какой-либо контекст для узла
тогда шаблон имеет приоритет
0,5. Например, описание / ссылка / символ имеет точно
тот же приоритет, что и
Описание // Character.
В SharePoint есть два шаблона для полей поиска
<xsl:template name="FieldRef_Lookup_body" match="FieldRef" mode="Lookup_body" ddwrt:dvt_mode="body">...
и
<xsl:template match="FieldRef[@Encoded]" mode="Lookup_body" ddwrt:dvt_mode="body">
Первый имеет приоритет 0 (соответствует по названию), второй имеет приоритет 0.5 (соответствует по контексту).
Мой пользовательский шаблон, который должен переопределять закодированный поиск
<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" mode="Lookup_body">...
также имеет приоритет по умолчанию, равный 0,5 (помните, «... не имеет значения, насколько специфична контекстная информация ...»), поэтому процессор xsl выбирает последний определенный (*).
Чтобы преодолеть это, вы можете использовать приоритет атрибута и установить его на большее значение, чем шаблон по умолчанию. В моем случае я установил его на 1.
<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" priority="1" mode="Lookup_body">...
(*) Очевидно, что SharePoint загружает пользовательские шаблоны до загрузки своих собственных. Был ли это выбор на основе каких-то технических критериев или чтобы я изучал xsl, остается загадкой.