1

私の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 でどうすればProfessorRoomおよび を印刷できますかSubject

例えば:

教授用: Name1、部屋 IA-301、被験者 Kolokvij。

4

2 に答える 2

1

ここでxsl:keyを読む必要があります。これにより、必要なレコードを簡単に検索できるようになり、複数の学校のレコードを検索する場合はより効率的になります。

id属性に基づいて教授レコードを検索するには、次のようにキーを定義します。

<xsl:key name="Professor" match="Professor" use="@id" />

同様に、id属性値を使用してRoom要素を検索するには、次のようにします。

<xsl:key name="Room" match="Room" use="@id" />

キーを使用するには、現在School要素 (つまり、"School" に一致するテンプレート内) に配置されていると仮定すると、Professorの値を次のように取得します。

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

これをSubjectに拡張するのは明らかに簡単です。(最初にSchool要素を選択するには、明らかに他のコードが必要になることに注意してください。たとえば、 <xsl:apply-templates select="//School" />)

于 2013-08-24T09:06:29.650 に答える
1

私はこれに答えますが、今後のために、もう少し考えて質問を述べてください..

WorkingTime がドライバー/コンテキストであると仮定し、xml が「ルート」タグでラップされていると仮定すると、次のように記述します。

<!-- 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])"/>   

カール..

于 2013-08-24T06:50:15.433 に答える