Я новичок в использовании XSL. Я пытаюсь преобразовать XML-файл в другой XML-файл с другой структурой, используя XSL. входа части XML выглядит следующим образом:Преобразование последовательности тегов с использованием XSL
<tag>
<Keyword>Event: Some Text</Keyword>
<Keyword>Group: Some Text</Keyword>
<Keyword>Other: Some Text</Keyword>
</tag>
Я хотел бы желаемый выхода быть:
<tag>
<event> Some Text </event>
<group> Some Text </group>
<other> Some Text </other>
</tag>
Моего текущего XSL файл:
<xsl:for-each select="tag">
<xsl:if test="starts-with(Keyword, 'Event: ')">
<event>
<xsl:value-of select="substring-after(Keyword, 'Event: ')"/>
</event>
</xsl:if>
<xsl:if test="starts-with(Keyword, 'Group: ')">
<group>
<xsl:value-of select="substring-after(Keyword, 'Group: ')"/>
</group>
</xsl:if>
<xsl:if test="starts-with(Keyword, 'Other: ')">
<other>
<xsl:value-of select="substring-after(Keyword, 'Other: ')"/>
</other>
</xsl:if>
</xsl:for-each>
Токовый выход только показывает узел событий и не отображает остальные узлы:
<tag>
<event> Some Text </event>
</tag>
Я попытался переключением раздела «группы» с разделом «событий» в XSL, однако все дочерние узлы не отображаются, возможно, из-за упорядочение узлов ключевого слова во входном XML. Итак, как я могу читать все узлы ключевых слов и преобразовывать их в соответствующие новые узлы для отображения?
Большое вам спасибо ... это работает! – Hariz
Вы должны посмотреть на решение @ Pierre и подумать о том, чтобы попытаться сделать больше совпадений с шаблонами, чем для каждого утверждения в вашем XSLT. Это своего рода другой способ делать вещи (декларативные или процедурные), которые иногда трудно понять, но это облегчит разработку и обслуживание. –