Это содержание образец XML я написал для объяснения цели,XSLT - Выберите узел из шаблонов на основе карты
<doc>
<array>
<?Table_type Small?>
<table>
<data>text</data>
</table>
</array>
<array>
<?Table_type Medium?>
<table>
<data>text</data>
</table>
</array>
<array>
<?Table_type Large?>
<table>
<data>text</data>
</table>
</array>
</doc>
Здесь Вы можете определить 3 типа таблиц, таблица, содержащая значение инструкции обработки Small, Medium и Большой. (в фактическом документе есть больше типов таблиц)
что я хочу сделать, проверив тип таблицы (идентифицируйте с помощью инструкции по обработке), добавьте size
атрибут <data>
узлов.
поскольку существует большое количество существующих в исходном документе я использует следующий метод XSL для выполнения этой задачи таблицы типов,
<xsl:variable name="table.type.mapping">
<map parent='Small' mapto='10'/>
<map parent='Medium' mapto='20'/>
<map parent='Large' mapto='30'/>
</xsl:variable>
<xsl:template match="data[ancestor::array/processing-instruction('Table_type')=$table.type.mapping/map[@parent=ancestor::array/processing-instruction('Table_type')]/@parent]">
<data size="{$table.type.mapping/map[@parent=ancestor::array/processing-instruction('Table_type')]/@mapto}">
<xsl:apply-templates/>
</data>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
Но это не читает соответствующее значение атрибута с карты и помещается в соответствующем <data>
узле ,
Мой ожидается выход,
<doc>
<array>
<?Table_type Small?>
<table>
<data size="10">text</data>
</table>
</array>
<array>
<?Table_type Medium?>
<table>
<data size="20">text</data>
</table>
</array>
<array>
<?Table_type Large?>
<table>
<data size="30">text</data>
</table>
</array>
</doc>
Любое предложение, как я могу изменить мой шаблон для чтения правильное значение с карты и добавить правильный атрибут в <data>
узел?
Этот вопрос помечается XSLT 2.0. –
@ michael.hor257k: Конечно, ваше право. Я просто узнал, что после публикации моего ответа. – zx485