2011-06-29 43 views
1

處理,我必須在follwing XML結構的過程:TEI關鍵設備,雙端點附件;如何使用XSL生成HTML

<p>[1] Intencio <emph rend="italic">nostra</emph> 
    <anchor xml:id="AJH-L.1.1"/>de<anchor xml:id="AJH-L.1.2"/> some more like this.. 
</p> 
<app from="#AJH-L.1.1" to="#AJH-L.1.2"> 
    <rdg wit="#V">in</rdg> 
</app> 

成類似:

<div>[1] Intencio <span class='italic'>nostra</span> 
    de<a href='AJH-L.1.1'>1</a> and so on.. 
</div> 
<div class='appEntry'> 
    <span class='rdg'>in</span> 
</div> 

儘管1,就是要標。

建設實際的設備,但建立腳註,因爲有關錨的信息來自外部設備元素,我沒有問題。

除此之外,我不得不提到,可以有一個額外的應用程序元素從錨-1到錨-4在同一時間。

我已經看到一個關於如何選擇這些僞重疊元素之間的文本這個問題,它幫助了我很多。但我找不到解決這個問題的任何方法。

在TEI這樣的標準方法必須有一個解決方案,但我無法找到它,我會很高興,如果任何人有任何建議。

提前許多感謝, 蒂莫

+2

你有一個很好的問題的開始,但我發現很難遵循。你能提供迄今爲止嘗試過的XSL嗎?另外,我不明白你的意思是「你可以提供一個例子嗎?」可以是一個額外的應用程序 - 元素從錨-1到錨-4在同一時間嗎? – cordsen

+0

@cordsen:好的,現在我知道我不是唯一一個對此感到困惑的人:) –

+0

sry,我確實在一個很好的路上。我明天會告訴你我自己的解決方案,或者製造更多混亂 – Timo

回答

0

因此,這裏是包括重疊的問題,以及對XML的一個更復雜的例子。

<div type='subdivision'> 
    <p> 
    .... 
    <anchor xml:id="AJH-L.2.63"/>intellectus cum re que sentitur <anchor 
    xml:id="AJH-L.2.64"/>in<anchor xml:id="AJH-L.2.65"/> apprehensione<anchor 
    xml:id="AJH-L.2.66"/> 
    .... 
    </p> 
    .... 
    <app from="#AJH-L.2.64" to="#AJH-L.2.65"> 
    <rdg wit="#H #M #N #P #R #V">-</rdg> 
    </app> 
    <app from="#AJH-L.2.63" to="#AJH-L.2.66"> 
    <rdg wit="#M">- <emph rend="italic">hom.</emph></rdg> 
    </app> 
    .... 
</div> 

我的XSLT模板至今:

<xsl:template match="TEI:anchor"> 
     <xsl:variable select="@xml:id" name="anchorId"/> 
     <xsl:for-each select="ancestor::TEI:p/TEI:app[@to=concat('#',$anchorId)]"> 
     <a class="rs" name="rs_{count(preceding::TEI:app)+1}" 
      href="#app_{count(preceding::TEI:app)+1}"> 
      <xsl:value-of select="count(preceding::TEI:app)+1"/> 
     </a> 
     </xsl:for-each> 
    </xsl:template> 

    <xsl:template match="TEI:app"> 
    <xsl:variable select="substring(@from,2)" name="from"/> 
    <xsl:variable select="substring(@to,2)" name="to"/> 
    <table class="appEntry"> 
     <tr rowspan="{count(TEI:rdg)+1}"> 
     <td> 
      <a name="app_{position()}" href="#rs_{position()}"> 
      <xsl:value-of select="position()"/> 
      </a> 
     </td> 
     <td> 
     <!-- the referenced text from between the anchors --> 
      <xsl:value-of select="//TEI:div[current()]//text()[preceding::TEI:anchor[@xml:id=$from] and following::TEI:anchor[@xml:id=$to]]"/> 
      <xsl:for-each select="TEI:rdg"> 
      <tr> 
       <td> 
       <!-- all readings --> 
       <xsl:value-of select="."/> 
       </td> 
      </tr> 
      </xsl:for-each> 
     </td> 
     </tr> 
    </table> 
    </xsl:template> 

並且得到的輸出應該如下所示:

<div class="maintext"> 
    .... 
    intellectus cum re que sentitur in <a href="#app_32" name="rs_32" class="rs">32</a> 
    apprehensione <a href="#app_33" name="rs_33" class="rs">33</a> 
    .... 
</div> 
<div class="apparatus"> 
    .... 
    <tr> 
    <td><a href="#rs_32" name="app_32">32</a><td> 
    <td>in</td> 
    <td> - </td> 
    </tr> 
    <tr> 
    <td><a href="#rs_33" name="app_33">33</a><td> 
    <td>intellectus cum re que sentitur </td> 
    <td>- hom.</td> 
    </tr> 
    .... 
</div> 

除亂表這似乎很好地工作。這不是我想象的巫術,只要我做出了正確的開始。

我希望我能指出我的問題並給出一個很好的答案。 你覺得怎麼樣?

問候, 蒂莫