我的XML:
<WorkingTime>
<FromTime>08:00</FromTime>
<ToTime>11:00</ToTime>
<Name>Izpit Matematika</Name>
<Owner>Marko Lackovic</Owner>
<Category>
<School Professor="111" Room="1" Subject="882" />
</Category>
</WorkingTime>
<Professors>
<Professor email="xxx" id="111" code="String">Name 1</Professor>
<Professor email="xxx" id="222" code="String">Name 2</Professor>
<Professor email="xxx" id="333" code="String">Name 3</Professor>
</Professors>
<Rooms>
<Room id="1">IA-301</Room>
<Room id="2">A-302</Room>
<Room id="3">A-303</Room>
<Room id="4">A-304</Room>
<Room id="5">A-305</Room>
<Room id="6">A-306</Room>
</Rooms>
<Subjects>
<Subject id="881">Vaje</Subject>
<Subject id="882">Kolokvij</Subject>
<Subject id="883">Predmet</Subject>
<Subject id="884">Izpit</Subject>
</Subjects>
我现在如何在XSLT中打印Professor
,Room
和Subject
。
例如:
教授:姓名1,IA-301室和主题Kolokvij。
答案 0 :(得分:1)
我会回答这个问题,但是,为了将来,请更多地考虑一下你的问题。
假设WorkingTime是驱动程序/上下文并假设你的xml包含一个“root”标记,那么你会写:
<!-- a little shortcut variable -->
<xsl:variable name="school" select="/root/WorkingTime/Category/School"/>
<xsl:value-of select="concat('For Professor: ',
/root/Professors/Professor[@id=$school/@Professor],
', for Room: ', /root/Rooms/Room[@id=$school/@Room],
', and for Subject: ',
/root/Subjects/Subject[@id=$school/@Subject])"/>
卡尔..
答案 1 :(得分:1)
您需要在此处阅读 xsl:key ,因为这样可以直接查找您需要的记录,并且在查找多个学校的记录时更高效
要根据 id 属性查找教授记录,您可以按如下方式定义密钥:
<xsl:key name="Professor" match="Professor" use="@id" />
同样,要使用 id 属性值查找 Room 元素:
<xsl:key name="Room" match="Room" use="@id" />
要使用密钥,假设您当前位于学校元素上(即在匹配“学校”的模板中),您将获得教授的价值像这样:
<xsl:value-of select="key('Professor', @Professor)" />
所以,你可能会有这样的模板
<xsl:template match="School">
Professor: <xsl:value-of select="key('Professor', @Professor)" />
Room: <xsl:value-of select="key('Room', @Room)" />
</xsl:template>
为主题扩展此功能显然是直截了当的。 (请注意,您显然需要其他代码来首先选择学校元素,例如<xsl:apply-templates select="//School" />
)