XSLT输出元素转换为特定的标记HTML

时间:2014-02-25 13:45:30

标签: html xslt xslt-2.0

输入

 <?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之外的所有元素或类似的东西,那将是完美的。但我不知道怎么...... 请帮助!

2 个答案:

答案 0 :(得分:0)

您的预期输出和样式表确实没有意义。下面是猜测你想要实现的目标。

解决此类问题的最佳方法是编写单独的模板。然后,在处理什么类型的节点时更清楚,在你的情况下真的不需要变量。

请注意,代码假定在输入中的"http://www.tei-c.org/ns/1.0"元素上声明了默认名称空间TEI。通常,此元素不在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>

答案 1 :(得分:0)

我刚刚添加了处理tei:pb的模式,并输出tei:div[@type='arbeitsphase']tei:pb以外的所有节点: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>