Удалите содержимое XML на данном узле и измените формат выходного файла - PullRequest
0 голосов
/ 24 октября 2011

[таблица стилей XSLT]

В приведенном ниже примере

<tag1>
    <tag2>
        ...
            <generatoritem id="name1">
                <tag5>
                ...
                    <tag6>
                        <name>Center</name>
                        <keyframe>
                            <when>frame1</when>
                            <value>
                                <horiz>100</horiz>
                                <vert>100</vert>
                            </value>
                        </keyframe>
                        <keyframe>
                            <when>frame2</when>
                            <value>
                                <horiz>150</horiz>
                                <vert>150</vert>
                            </value>
                        </keyframe>
                    </tag6>
                </tag5>
            </generatoritem>
            <generatoritem id="name2">
                <tag7>
                ...
                    <tag8>
                        <name>Center</name>
                        <keyframe>
                            <when>frame3</when>
                            <value>
                                <horiz>100</horiz>
                                <vert>100</vert>
                            </value>
                        </keyframe>
                        <keyframe>
                            <when>frame4</when>
                            <value>
                                <horiz>150</horiz>
                                <vert>150</vert>
                            </value>
                        </keyframe>
                    </tag8>
                </tag7>
            </generatoritem>
    </tag2>
</tag1>

, исключая избыток узлов, мы пытаемся получить следующий выходной формат:

id='name1'
    instance='frame1'
        horiz='100'
        vert='100'
    instance='frame2'
        horiz='150'
        vert='150'

id='name2'
    instance='frame3'
        horiz='200'
        vert='200'
    instance='frame4'
        horiz='250'
        vert='250'  

Итак, основываясь на нескольких значениях идентификаторов, мы работаем с конкретными узлами.Метки должны быть удалены, и только критическая информация должна быть сохранена.

Пожалуйста, сообщите.Спасибо!

1 Ответ

1 голос
/ 25 октября 2011
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                                    xmlns:exslt="http://exslt.org/common">
    <!-- disable xml output -->
    <xsl:output method="text"/>

    <xsl:variable name="toprocess">
    <data>
        <node>name1</node>
        <node>name3</node> <!-- and other nodes you want to process -->
    </data>
    </xsl:variable>

    <xsl:template match="/">
        <xsl:apply-templates select=".//generatoritem[ @id = exslt:node-set($toprocess)/data/node]"/>
    </xsl:template>

    <xsl:template match="generatoritem">
    id=<xsl:value-of select="@id"/>
    <xsl:apply-templates select=".//keyframe"/>
    <!-- just for the new line -->
    <xsl:text>
    </xsl:text>
    </xsl:template>

    <xsl:template match="keyframe">
         instance='<xsl:value-of select="when"/>'
                 horiz='<xsl:value-of select="value/horiz"/>'
                 vert='<xsl:value-of select="value/vert"/>
    </xsl:template>

    </xsl:stylesheet>

должен выдавать в качестве вывода

xsltproc data.xsl data.xml

id='name1'
   instance='frame1'
       horiz='100'
       vert='100'
   instance='frame2'
       horiz='150'
       vert='150'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...