XSLT: изменить имя элемента и значения атрибута - PullRequest
0 голосов
/ 18 января 2010

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

У меня есть этот тип тегов (их много) в 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>

Поскольку я новичок в этом, я не знаю, с чего начать.

1 Ответ

2 голосов
/ 18 января 2010

Это должно дать вам кое-что для начала:

<?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>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...