我在命名空间中有以下XML结构:
<School>
<SchoolInfo>
<SchoolName>The Big School</SchoolName>
<Opened>2008</Opened>
<SchoolID>SCH1122</SchoolID>
<Geograpics>
<Location>London</Location>
<PostCode>ZZ11 1ZZ</PostCode>
</Geographics>
</SchoolInfo>
<Pupil>
<Name>Tom</Name>
<LastName>Jones</LastName>
<Class>12B</Class>
<Age>16</Age>
</Pupil>
<Pupil>
<Name>Steve</Name>
<LastName>Jobs</LastName>
<Class>09A</Class>
<Age>17</Age>
</Pupil>
<Pupil>
<Name>Joe</Name>
<LastName>Blogs</LastName>
<Class>13A</Class>
<Age>15</Age>
</Pupil>
</School>
使用XSLTl我希望创建一个看起来像以下结构的PSV: (SchoolID |地点|名称|类|年龄)
SCH1122|London|Tom|12B|16
SCH1122|London|Steve|09A|17
SCH1122|London|Joe|13A|15
这是否可以使用XSLT,我将如何解决这个问题?
到目前为止代码:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="NamespaceHere"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:cs="urn:cs"
exclude-result-prefixes="cs x msxsl" >
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="x:SchoolID">
<xsl:value-of select="text()"/>
<xsl:text>|</xsl:text>
</xsl:template>
<xsl:template match="x:PostCode">
<xsl:value-of select="text()"/>
<xsl:text>|</xsl:text>
</xsl:template>
<xsl:template match="x:Name">
<xsl:value-of select="text()"/>
<xsl:text>|</xsl:text>
</xsl:template>
<xsl:template match="x:Class">
<xsl:value-of select="text()"/>
<xsl:text>|</xsl:text>
</xsl:template>
<xsl:template match="x:Age">
<xsl:value-of select="text()"/>
<xsl:text>|</xsl:text>
</xsl:template>
<xsl:template match="text()">
<xsl:apply-templates select="x:Message"/>
</xsl:template>
<xsl:template match="x:School">
<xsl:apply-templates select="x:SchoolInfo/x:SchoolID"/>
<xsl:apply-templates select="x:SchoolInfo/x:Geographics/x:PostCode"/>
<xsl:apply-templates select="x:Pupil/x:Name"/>
<xsl:apply-templates select="x:Pupil/x:Class"/>
<xsl:apply-templates select="x:Pupil/x:Age"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
当我只有一个瞳孔时,这是有效的,但是当我得到多个瞳孔时,输出变得如下:
SCH1122 | |伦敦|汤姆|史蒂夫| 12B | 09A | 16 | 17
答案 0 :(得分:1)
如何将match="x:School"
更改为:
<xsl:template match="x:School">
<xsl:variable name="parent" select="."/>
<xsl:for-each select="x:Pupil">
<xsl:apply-templates select="$parent/x:SchoolInfo/x:SchoolID"/>
<xsl:apply-templates select="$parent/x:SchoolInfo/x:Geographics/x:PostCode"/>
<xsl:apply-templates select="x:Name"/>
<xsl:apply-templates select="x:Class"/>
<xsl:apply-templates select="x:Age"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>