<xsl:template name="FieldRef_body.Status"
match="FieldRef[@Name=/ViewFields/FieldRef[1]]" mode="body">
Здесь следует отметить две вещи :
Атрибут match содержит выражение XPath, которое при применении к предоставленному документу XML выбирает no node на всех . Предполагается выбрать элемент с именем FieldRef
, строковое значение которого, атрибут Name
равен строковому значению первого FieldRef
дочернего элемента ViewFields
верхнего элемента. Однако ни один из элементов FieldRef
в документе XML не имеет (непустого) строкового значения. С другой стороны, строковые значения всех атрибутов Name
не являются пустыми. Я думаю, что вы хотели: match="FieldRef[@Name=/ViewFields/FieldRef[1]/@Name]"
Любой шаблон в (неанонимном) режиме не рассматривается процессором XSLT для выбора, если его режим отличается от текущего режима .
Поскольку начальный режим в XSLT 1.0 (и в XSLT 2.0) является пустым (анонимным) режимом, единственный способ создать шаблон в неанонимном режиме, который рассматривается для выбора, - это явно указать режим для <xsl:apply-templates>
инструкция.
Это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="*/*" mode="body"/>
</xsl:template>
<xsl:template match="FieldRef[@Name=/ViewFields/FieldRef[1]/@Name]"
mode="body">
<xsl:value-of select="@Name"/>
</xsl:template>
</xsl:stylesheet>
дает этот результат, показывая, что шаблон выбран для обработки :
Planing Status