У меня есть таблица стилей xslt, которая должна вызвать функцию расширения C # XSLT для обработки коллекции элементов. Код выглядит примерно так:
XSLT:
<xsl:apply-templates mode="MyTemplate" select="myextension:GetSomeCollection(@someattribute)" />
<xsl:template mode="MyTemplate" match="myroot">
<xsl:value-of select="xpath" />...<xsl:value-of select="/xpath" />
</xsl:template>
Метод расширения:
public XPathNavigator GetSomeCollection(string Attribute)
{
XmlDocument doc = new XmlDocument()
//etc...
return doc.CreateNavigator();
}
Метод расширения возвращает XPathNavigator
, так как это единственный способ, который я вижу для метода расширения для возврата любого вида коллекции.
Проблема, с которой я сталкиваюсь, заключается в том, что мой шаблон (шаблон с mode = "MyTemplate") должен иметь возможность доступа к узлам xml в корневом / входном документе к таблице стилей xslt (а также к узлам в наборе узлов возвращается методом расширения), однако шаблон, похоже, имеет доступ только к фрагменту xml, возвращаемому GetSomeCollection
- выражения xpath, начинающиеся с /
, просто разрешают начало этого фрагмента.
Я понимаю, почему это так (шаблон обрабатывает фрагмент xml, однако этот фрагмент принадлежит другому документу), однако я не вижу, как его обойти. Кажется, нет никакого способа получить метод расширения для создания фрагмента XML, принадлежащего исходному документу.
Что я могу сделать?