[XSLT stylesheet]
在下面的示例中,
<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'
因此,基于多个id值,我们处理特定节点。必须消除标签,并保留关键信息。
请指教。谢谢!
答案 0 :(得分:1)
<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'