Я пытаюсь использовать XSLT 2.0, однако тег <xsl:value-of select=...>
больше не дает мне первый элемент. Я получаю все значения в XML. Как преобразовать следующий XSLT для работы с XSLT 2.0?Преобразование из XSLT 1.0 в 2.0 не дает первого текста из тега
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Data">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Data/ABC">
<xsl:for-each select=".">
<Data xmlns="example.com">
<GEF>
<id><xsl:value-of select="id"/></id>
<time><xsl:value-of select="time"/></time>
<type>test</type>
</GEF>
</Data>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Если у меня был этот XML:
<Data xmlns="example.com">
<ABC>
<id>2</id>
<time>125622</time>
</ABC>
</Data>
Если я использую XSLT 1.0, я хотел бы получить это:
<Data xmlns="example.com">
<GEF>
<id>2</id>
<time>125622</time>
<type>test</type>
</GEF>
</Data>
Обычно, я хотел бы получить 2
и 125622
в виде отдельных элементов для каждого тега в XSLT. Однако теперь он просто получает оба значения и выводит их. Он даже не печатает теги после преобразования. Что я могу использовать в 2.0? Мои поиски ничего не принесли.
Это то, что я получаю с 2,0:
<Data xmlns="example.com">
2
125622
test
</Data>
Какой результат вы хотите получить? - И почему у вас есть ' ', но нет шаблонов в этом режиме? –
«Теперь он просто получает оба значения и выводит их. Он даже не печатает теги после преобразования» звучит так, как если бы элементы входного XML находились в пространстве имен, и поэтому ваши шаблоны не применяются. Есть ли 'xmlns =" ... "' в элементе 'Data' или предке? –
Ваш второй шаблон должен соответствовать 'match =" ABC "'. Поскольку вы переопределяете совпадение, применяются только правила преобразования по умолчанию, а именно, чтобы испускать только текст элементов. Удалите 'Data /', и он должен работать. –