Проблема msxsl:node-набора XSL

Используйте определенные имена полей, поэтому если кто-то изменяет таблицу на Вас, Вы не получаете неожиданные результаты. На предмете: ВСЕГДА определяйте имена полей при выполнении вставки поэтому, если необходимо добавить столбец позже, Вы не должны возвратиться и зафиксировать свою программу и изменить базу данных одновременно в производственном выпуске.

5
задан Maleks 7 December 2009 в 17:07
поделиться

3 ответа

Я подозреваю, что у вас есть пространство имен по умолчанию, объявленное в вашей таблице стилей. Это эффективно поместит элементы и в пространство имен. Чтобы выбрать элементы с указанием пространства имен с помощью XPath 1.0, вы всегда должны использовать префикс в выражении.

Итак, если у вас есть что-то вроде этого вверху вашей таблицы стилей:

<xsl:stylesheet xmlns="http://example.com"...>

Тогда вам также нужно будет добавить это:

<xsl:stylesheet xmlns="http://example.com" xmlns:x="http://example.com"...>

А затем используйте префикс «x» в выражении XPath:

<xsl:for-each select="msxsl:node-set($rtf)/x:item-list/x:item">
  <xsl:value-of select="@id"/>
</xsl:for-each>

Сообщите мне, помогло ли это. Я здесь только догадываюсь.

8
ответ дан 18 December 2019 в 14:47
поделиться

Мне это кажется нормальным.

Вы правильно объявили пространство имен msxsl для функций расширения? Примерно так:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">

Я предполагаю, что вы используете здесь процессор Microsoft XSLT

1
ответ дан 18 December 2019 в 14:47
поделиться

В отличие от MSXSL, XslCompiledTransform предоставляет функцию node-set () , где это должно быть - в общем пространстве имен EXSLT :

<xsl:stylesheet xmlns:exslt="http://exslt.org/common">
  ...
  <xsl:for-each select="exslt:node-set($rtf)/item-list/item">
  ...
</xsl:stylesheet>
4
ответ дан 18 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

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