XSLT получает кусок xml на заказ - PullRequest
1 голос
/ 13 апреля 2011

У меня небольшой вопрос по XSLT, я только недавно начал с xslt. Итак, дело в том, что мне нужно дать с помощью моего пользовательского метода кусок xml, соответствующий шаблону, но проблема в том, что я даю строку, но у нее больше нет тегов: так пример, если мой xml выглядит так:

<a>hi</a>
<a>bye</b>

Я получаю только строку, которая состоит из этого: "привет пока" Поэтому мне нужно указать вместо значения / текста узла только узел, содержащий теги, атрибуты, элементы и т. Д. И т. Д. Мой xslt выглядит так:

<xsl:template match="SpecialNode">
    <xsl:value-of select="CustomMethod:Handler(node()[*], @name)"/>
</xsl:template>

но что бы я ни пытался (например ./node() или descendant::node() или * и т. Д.), Я всегда получаю строку без тегов xml :( но мне нужно, чтобы что-то подобное передавалось моему методу в строке.

<a>hi</a><a>bye</a>

Ответы [ 3 ]

0 голосов
/ 13 апреля 2011

Использование :

CustomMethod:Handler(.)
0 голосов
/ 13 апреля 2011

Ваша таблица стилей XSLT обрабатывает дерево узлов, и вы хотите, чтобы ваш внешний код c # (?) Видел лексический сериализованный XML, содержащий угловые скобки.Таким образом, дерево узлов должно быть сериализовано в лексический XML где-то вдоль линии.Это не случится по волшебству, как неявное преобразование, выполняемое вызовом функции.Вероятно, лучше всего позволить коду C # получать данные в виде узлов и выполнять сериализацию оттуда - при условии, что обработка не может быть узлом на уровне дерева.

0 голосов
/ 13 апреля 2011

Если вы просто хотите получить имя тега, попробуйте

<xsl:template match="SpecialNode">
    <xsl:value-of select="CustomMethod:Handler(name(.))"/>
</xsl:template>

Если вам нужен весь элемент, а также имя тега, попробуйте

<xsl:template match="SpecialNode">
    <xsl:value-of select="CustomMethod:Handler(., name(.))"/>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...