2014-02-25 64 views
0

輸入XSLT輸出的元素插入特定的標記HTML

<?xml version="1.0"?> 
<TEI xmlns="http://www.tei-c.org/ns/1.0"> 
<teiHeader> 
</teiHeader> 
<text> 
<body> 
<div type="header"/> 
<div type="adresse"> 
    <pb n="A" facs="Adr.jpg"/> 
    <addrLine></addrLine> 
</div> 
    <div ana="ausfertigung" type="arbeitsphase" n="1"> 
    <pb n="1" facs="1.jpg"/> 
    <p> 
    <lb/> Lorem ipsum dolor sit amet, 
    <lb/>consectetur adipisicing elit, 
    </p> 
    <p> 
    <lb/> sed do eiusmod tempor incididunt ut 
    <lb/>labore et dolore magna aliqua. 
    </p> 
    <pb n="2" facs="2.jpg"/> 
    <p> 
    <lb/>Ut enim ad minim veniam, 
    <lb/>quis nostrud exercitation ullamco laboris 
    </p> 
    </div> 
</body> 
</text> 
</TEI> 

通緝輸出:

<html> 
    <body> 
    <div id="page"> 
    <div id="ausfertigung" class="text-bild"> 
     <center> 
     <h4>Transkription</h4> 
     </center> 
     <div class="arbeitsphase-1"> 
     <p>Here comes text</p> 
     </div> 
    </div> 
    <!--div ausfertigung ends --> 
    <div id="bild"> 
    <center> 
     <h4>Manuskript</h4> 
    </center> 
    <p>Here come all pictures</p> 
    <div id="1" class="facs-klein"> 
     <img width="90%" src="1_klein.jpg"></img> 
    </div> 
    <div id="2" class="facs-klein"> 
     <img width="90%" src="2_klein.jpg"></img> 
    </div> 
    </div> 
<!--div bild ends --> 
</div> 
<!--div page ends --> 
</body> 
</html> 

我的更新XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:tei="http://www.tei-c.org/ns/1.0" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs tei" version="2.0"> 
<xsl:output omit-xml-declaration="yes" indent="yes" encoding="ISO-8859-1"/> 

<xsl:template match="tei:body"> 
    <xsl:variable name="bild" select="tei:pb[@facs]"></xsl:variable> 
    <div id="ausfertigung" class="text-bild"> 
     <center><h4>Transkription</h4></center> 
     <div class="arbeitsphase-{//tei:div[@type='arbeitsphase']/@n}"> 
      <xsl:apply-templates select="//tei:div[@type='arbeitsphase'][not(self::tei:pb)]"/> 
     </div> 
    </div> 
    <div id="bild"> 
     <center><h4>Manuskript</h4></center> 
     <xsl:apply-templates select="//tei:pb" mode="bild"></xsl:apply-templates> 
    </div> 

</xsl:template> 

<xsl:template match="tei:pb" mode='bild'> 
    <xsl:variable name="facs" select="substring-before(@facs, '.jpg')"/> 
    <div class="arbeitsphase-{@n}"> 
    <div id="{$facs}" class="facs-klein"> 
     <img src="{concat($facs, '_klein.jpg')}" width="90%"></img> 
    </div> 
    </div> 
</xsl:template> 

<xsl:template match="tei:p"> 
    <p> 
     <xsl:apply-templates/> 
    </p> 
</xsl:template> 
</xsl:stylesheet> 

輸出我和更新XSLT得到:

<div id="ausfertigung" class="text-bild"> 
    <center> 
    <h4>Transkription</h4> 
    </center> 
    <div class="arbeitsphase-1"> 
      <p> 
       Lorem ipsum dolor sit amet, 
       consectetur adipisicing elit, 
      </p> 
      <p> 
       sed do eiusmod tempor incididunt ut 
       labore et dolore magna aliqua. 
      </p> 
      <p> 
       Ut enim ad minim veniam, 
       quis nostrud exercitation ullamco laboris 
       </p> 
    </div> 
    </div> 
<div id="bild"> 
    <center> 
    <h4>Manuskript</h4> 
    </center> 
<div class="arbeitsphase-A"> 
    <div id="Adr" class="facs-klein"> 
    <img src="Adr_klein.jpg" width="90%"/> 
    </div> 
</div> 
<div class="arbeitsphase-1"> 
    <div id="1" class="facs-klein"> 
    <img src="1_klein.jpg" width="90%"/> 
    </div> 
</div> 
<div class="arbeitsphase-2"> 
    <div id="2" class="facs-klein"> 
    <img src="2_klein.jpg" width="90%"/> 
    </div> 
</div> 
</div> 

我不知道如何將pb只輸入div id =「bild」。我在div id =「ausfertigung」和div id =「bild」中獲得了兩次。如果我能處理除pb之外的所有元素或類似的東西,那將是完美的。但我不知道如何... 請幫忙!

+0

你的輸入和輸出XML不能很好地形成。請爲它們添加根元素和名稱空間聲明(用於tei)。還要添加一個_complete_ XSLT樣式表,而不僅僅是一個模板。 –

+1

好吧,我已經改變了輸入XML並輸出HTML! – bigsky

+1

如果你想在你想要的輸出中輸入1.jpg,爲什麼你要在'concat($ facs,'_klein.jpg')'後面添加一個後綴?你確定這是你想要的輸出嗎?似乎除了缺少' ...'標籤和'img'名稱的區別外,您已經生成了它。 – helderdarocha

回答

0

我只是增加了一個模式,用於處理tei:pb和I輸出除了tei:pbtei:div[@type='arbeitsphase']所有節點:tei:div[@type='arbeitsphase'][not(self::tei:pb)]

所以,這對我的作品的樣式表:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:tei="http://www.tei-c.org/ns/1.0" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs tei" version="2.0"> 
<xsl:output omit-xml-declaration="yes" indent="yes" encoding="ISO-8859-1"/> 
<xsl:template match="tei:body"> 
    <xsl:variable name="bild" select="tei:pb[@facs]"></xsl:variable> 
    <div id="ausfertigung" class="text-bild"> 
    <center><h4>Transkription</h4></center> 
    <div class="arbeitsphase-{//tei:div[@type='arbeitsphase']/@n}"> 
     <xsl:apply-templates select="//tei:div[@type='arbeitsphase'][not(self::tei:pb)]"/> 
    </div> 
    </div> 
    <div id="bild"> 
    <center><h4>Manuskript</h4></center> 
    <xsl:apply-templates select="//tei:pb" mode="bild"></xsl:apply-templates> 
    </div> 
</xsl:template> 
<xsl:template match="tei:pb" mode='bild'> 
    <xsl:variable name="facs" select="substring-before(@facs, '.jpg')"/> 
    <div class="arbeitsphase-{@n}"> 
    <div id="{$facs}" class="facs-klein"> 
    <img src="{concat($facs, '_klein.jpg')}" width="90%"></img> 
    </div> 
    </div> 
</xsl:template> 
<xsl:template match="tei:p"> 
<p> 
    <xsl:apply-templates/> 
</p> 
</xsl:template> 
</xsl:stylesheet> 

我得到以下輸出:

<div id="ausfertigung" class="text-bild"> 
    <center> 
    <h4>Transkription</h4> 
    </center> 
    <div class="arbeitsphase-1"> 
     <p> 
      Lorem ipsum dolor sit amet, 
      consectetur adipisicing elit, 
     </p> 
     <p> 
      sed do eiusmod tempor incididunt ut 
      labore et dolore magna aliqua. 
     </p> 
     <p> 
      Ut enim ad minim veniam, 
      quis nostrud exercitation ullamco laboris 
      </p> 
    </div> 
    </div> 
    <div id="bild"> 
    <center> 
    <h4>Manuskript</h4> 
    </center> 
    <div class="arbeitsphase-A"> 
    <div id="Adr" class="facs-klein"> 
     <img src="Adr_klein.jpg" width="90%"/> 
    </div> 
    </div> 
    <div class="arbeitsphase-1"> 
    <div id="1" class="facs-klein"> 
     <img src="1_klein.jpg" width="90%"/> 
    </div> 
    </div> 
    <div class="arbeitsphase-2"> 
    <div id="2" class="facs-klein"> 
    <img src="2_klein.jpg" width="90%"/> 
    </div> 
    </div> 
</div> 
0

您的預期輸出和樣式表沒有任何意義。以下是嘗試猜測你想要達到的目標。

解決此類問題的最佳方法是編寫單獨的模板。然後,在處理什麼類型的節點的時候就更加清楚了,而且您的情況下確實不需要變量。

請注意,該代碼假定在輸入中的TEI元素上聲明瞭默認名稱空間"http://www.tei-c.org/ns/1.0"。通常,這個元素不在TEI名稱空間中。

這花了我很長一段時間,你應該花時間仔細研究它。不要急於添加評論,如「它不工作!」。

樣式表

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:tei="http://www.tei-c.org/ns/1.0" exclude-result-prefixes="tei" version="2.0"> 

<xsl:output omit-xml-declaration="yes" indent="yes" encoding="ISO-8859-1"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/tei:TEI"> 
    <html> 
     <xsl:apply-templates/> 
    </html> 
</xsl:template> 

<xsl:template match="tei:teiHeader|tei:div[@type='header' or @type='adresse']|tei:lb"/> 

<xsl:template match="tei:body"> 
    <body> 
     <xsl:apply-templates/> 
    </body> 
</xsl:template> 

<xsl:template match="tei:div[@type='ausfertigung']"> 
    <div id="{@type}" class="text-bild"> 
     <center> 
      <h4> 
       <xsl:text>Transkription</xsl:text> 
      </h4> 
     </center> 
     <div id="bild"> 
      <center> 
       <h4> 
        <xsl:text>Manuskript</xsl:text> 
       </h4> 
      </center> 
       <xsl:apply-templates/> 
     </div> 
    </div> 
</xsl:template> 

<xsl:template match="tei:pb"> 
    <div class="arbeitsphase-{@n}"> 
     <div id="{@n}" class="facs-klein"> 
      <img width="90%" src="{@facs}"/> 
     </div> 
    </div> 

</xsl:template> 

</xsl:stylesheet> 

輸出

<html> 
    <body> 
     <div id="ausfertigung" class="text-bild"> 
     <center> 
      <h4>Transkription</h4> 
     </center> 
     <div id="bild"> 
      <center> 
       <h4>Manuskript</h4> 
      </center> 
      <div class="arbeitsphase-1"> 
       <div id="1" class="facs-klein"><img width="90%" src="1.jpg"></div> 
      </div> 
      <div class="arbeitsphase-2"> 
       <div id="2" class="facs-klein"><img width="90%" src="2.jpg"></div> 
      </div> 
     </div> 
     </div> 
    </body> 
</html> 
+0

Hi Mathias!感謝您的回答!不幸的是,這不是我想要得到的輸出。問題是文本應該放在'div id =「ausfertigung」'和'div id =「bild」'中的所有圖片中。 XML和樣式表確實有道理!我不知道如何輸出'div id =「ausfertigung」'的子元素'pb'到一個單獨的div中。 – bigsky

+0

「arbeitsphase-1」和「arbeitsphase-2」呢? –

+0

它們是'div id =「ausfertigung」'中的內部元素。 – bigsky