Если вы хотите, чтобы все элементы <Learner>
имели потомок (в данном случае LearnAimRef ) с определенным значением, тогда вы можете использовать выражение предиката (бит между [
и ]
) для фильтрации набора узлов.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:theia="http://www.theia.org.uk/ILR/2011-12/1">
<xsl:template match="/theia:Message">
<xsl:copy-of select="theia:Learner[theia:LearningDelivery/theia:LearnAimRef='ZPROG001']"/>
</xsl:template>
</xsl:stylesheet>
Таким образом, copy-of
читается как , копирует все узлы Learner, у которых есть дочерний элемент с именем LearningDelivery, у которого есть дочерний элемент с именем LearnAimRef, у которого естьзначение, равное ZPROG001
Ваш XML-документ имеет пространство имен по умолчанию , равное "http://www.theia.org.uk/ILR/2011-12/1", поэтому для правильного выбора узла в XPath необходимо использоватьто же самое объявление пространства имен, поэтому в приведенном выше XSLT я назначил ваше пространство имен псевдониму и использовал его в XPath.
Если вы хотите, чтобы другие части исходного XML-источника копировались в выходное дерево, вы можете добавитьдругие правила, например <xsl:copy-of select="theia:LearningProvider"/>
Это не ответ на вопрос о применении преобразования в C #, однако на него уже дан ответ - Как применить таблицу стилей XSLT в C #
Надеюсь, это поможет:)