Когда тот же элемент XML соответствует двум шаблонам XSLT через другой XPaths, который шаблон выполняет и почему?

Вы действительно хотите ядро, или просто stacktrace? Если все, что Вы хотите, является stacktrace, Вы могли бы смотреть на открытый исходный код здесь и попытаться интегрировать код оттуда, или возможно просто вызов, это из командной строки достаточно.

я полагаю, что некоторый код в gdb проекте мог бы также быть полезным.

Другой думает, что Вы могли бы хотеть сделать, должен использовать gdb для присоединения к рабочему процессу.

$ gdb /path/to/exec 1234 # 1234 is the pid of the running process

7
задан TylerH 20 April 2015 в 19:16
поделиться

4 ответа

Ваш первый пункт действительно верен, существует определенный порядок, описанный в https://www.w3.org/TR/1999/REC-xslt-19991116#conflict . Согласно спецификации person / firstName имеет приоритет 0, а firstName имеет приоритет -0,5. Вы также можете указать приоритет самостоятельно, используя атрибут priority в xsl: template .

8
ответ дан 6 December 2019 в 19:39
поделиться

Рассмотрите это с учетом контекста. Первый соответствует и изменяет контекст n (поэтому второй не соответствует). Для контекста устанавливается значение ПОСЛЕ того, как первый выбран и обработан, поэтому видимый элемент из этого контекста больше не содержит "имя". ЕСЛИ вы хотите, чтобы оба выполнялись, вы можете вызвать их вместо этого, чтобы контекст вернулся наверх.

 <xsl:template match="people">
    <xsl:apply-templates select="person/firstname"/>
    <xsl:apply-templates select="firstname"/>
</xsl:template>
0
ответ дан 6 December 2019 в 19:39
поделиться

Я знаю, что если элемент "match" на два шаблона идентичны (которые никогда не должно случиться, я не думаю)

Это может случиться, но не имеет большого смысла делать это и иметь два совпадающих шаблона.

Из спецификации:

Это ошибка, если это оставляет больше чем одно соответствующее шаблонное правило. An XSLT-процессор может сигнализировать об ошибке; если он не сигнализирует об ошибке, он должны выздороветь, выбрав из соответствующие правила шаблона, которые слева, тот, который встречается последним в таблица стилей.

Другими словами, вы можете получить ошибку, или он просто будет использовать последний шаблон в вашем XSLT, в зависимости от того, какой процессор, который вы используете, был написан для обработки этой ситуации.

3
ответ дан 6 December 2019 в 19:39
поделиться

Обратите внимание, что значение атрибута match не выражение XPath (хотя оно использует подмножество синтаксиса XPath). Это шаблон XSLT . При отсутствии явных атрибутов priority выбор сводится к тому, какой шаблон имеет наивысший приоритет по умолчанию:

person / firstName имеет приоритет по умолчанию .5

firstName имеет приоритет по умолчанию 0

Таким образом, person / firstName побеждает.

Полное объяснение того, как работает разрешение конфликтов, можно найти здесь (хотя я рекомендую вам изучить всю главу, «Как работает XSLT»): Разрешение конфликтов для правил шаблонов

2
ответ дан 6 December 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: