Как выбрать указанный элемент, используя 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>
Другие вопросы по тегам