2010-01-18 7 views
0

Я совершенно новое в этом и пытаюсь выяснить, как сделать что-то вроде этого:XSLT: Изменить имя элемента и значения атрибутов

У меня есть этот тип тегов (многие из них) на XML-файл

<ImageData src="whatever.tif"/> 

Что мне нужно сделать, это сначала изменить их к ссылке с номером, как это:

<INCL.ELEMENT FILEREF="image0001.tif" TYPE="TIFF"/> 

поэтому число должно получить начальные нули и тип должен быть найден в атрибуте src.

Когда все изменилось список этих элементов также должен быть добавлен в верхней части XML, как этот

<INCLUSIONS> 
    <INCL.ELEMENT FILEREF="image0001.tif" TYPE="TIFF"/> 
    <INCL.ELEMENT FILEREF="image0002.tif" TYPE="TIFF"/> 
    <INCL.ELEMENT FILEREF="image0003.tif" TYPE="TIFF"/> 
    <INCL.ELEMENT FILEREF="image0004.tif" TYPE="TIFF"/> 
    ... 
    <INCL.ELEMENT FILEREF="image0014.tif" TYPE="TIFF"/> 
</INCLUSIONS> 

Так как я новичок в этом я невежественный, с чего начать.

+0

Некоторые отзывы на мой ответ был бы хороший. – Filburt

ответ

2

Это должно дать вам то, чтобы начать с:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml"/> 

    <xsl:template match="/"> 
     <INCLUSIONS> 
      <xsl:apply-templates /> 
     </INCLUSIONS> 
    </xsl:template> 

    <xsl:template match="ImageData"> 
     <xsl:variable name="imagecount" select="count(preceding::ImageData) + 1" /> 
     <xsl:variable name="fileextension" select="substring-after(./@src, '.')"/> 
     <INCL.ELEMENT> 
      <xsl:attribute name="FILEREF"> 
       <xsl:value-of select="concat('image', format-number($imagecount, '0000'), '.', $fileextension)"/> 
      </xsl:attribute> 
      <xsl:attribute name="TYPE"> 
       <xsl:choose> 
        <xsl:when test="$fileextension='tif'">TIFF</xsl:when> 
        <xsl:otherwise>JPEG</xsl:otherwise> 
       </xsl:choose> 
      </xsl:attribute> 
     </INCL.ELEMENT> 
    </xsl:template> 

+0

'substring-after (@src, '.')' Несколько хрупкий. 'substring (@src, string-length (@src) - 3, 3)' лучше. – Tomalak

+0

Hhhmm ... но это не удастся .jpeg и тому подобное. – Filburt

+0

Не так долго, пока вас интересует только '' tif'', как кажется, указывает вопрос. Кроме того, вы все равно можете сравнить с '' jpg'' и ''peg''. Шансы довольно малы, что файл изображения заканчивается '' peg'' и * не * jpeg. – Tomalak

Смежные вопросы