Как выбрать указанный элемент, используя XSLT по его индексу?
У меня есть XML-файл здесь:
<DM_Function Function="attribute value">
<DM>
<DM_Source SourceID="id1" SourceTitle="Title1" SourceContent="content1">
</DM_Source>
</DM>
<DM>
<DM_Source SourceID="id2" SourceTitle="Title2" SourceContent="content2">
</DM_Source>
</DM>
<DM>
<DM_Source SourceID="id3" SourceTitle="Title3" SourceContent="content3">
</DM_Source>
</DM>
</DM_Function>
В файле XSLT есть переменная:
<xsl:param name="dmIndex" select="2" />
Я хочу преобразовать файл XML в другой. Переменная является индексом элемента, я надеюсь, что другой файл XML просто покажет элемент Root и указанный элемент (включая атрибуты).
1 ответ
Решение
Это преобразование:
<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:param name="dmIndex" select="2" />
<xsl:template match="/*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:copy-of select="DM[$dmIndex]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML:
<DM_Function Function="attribute value">
<DM>
<DM_Source SourceID="id1" SourceTitle="Title1" SourceContent="content1">
</DM_Source>
</DM>
<DM>
<DM_Source SourceID="id2" SourceTitle="Title2" SourceContent="content2">
</DM_Source>
</DM>
<DM>
<DM_Source SourceID="id3" SourceTitle="Title3" SourceContent="content3">
</DM_Source>
</DM>
</DM_Function>
дает желаемый, правильный результат:
<DM_Function Function="attribute value">
<DM>
<DM_Source SourceID="id2" SourceTitle="Title2" SourceContent="content2"/>
</DM>
</DM_Function>