使用 XSLT 更改单个元素的样式

Change style of one single element using XSLT

我对使用 XSLT 完全陌生,但在我的工作中,他们要求我做一些 XSL 转换。如果我的问题太基础请见谅

我使用手写诗歌,我希望将每一节经文(l 元素,在 lg 内)视为一行。经文可以包含几个元素,例如缩写 (abbr)、删除 (del)、添加 (add) 和其他元素。我需要这些元素在每节经文中以不同的颜色显示。

这是我到目前为止能够编写的代码的一部分。

<xsl:template match = "TEI/text/body/lg">
  <p><xsl:apply-templates select = "l" /></p>
  </xsl:template>

  <xsl:template match="l" priority="0">
    <span style="color:black;">
      <xsl:value-of select="." />
    </span><br/>
  </xsl:template>

希望能帮到你。

请尝试以下解决方案:

给定此输入,似乎以 TEI(Text Encoding Initiative)格式编码:

<TEI xmlns="http://www.tei-c.org/ns/1.0">
  <teiHeader>
      <fileDesc>
         <titleStmt>
            <title>Title</title>
         </titleStmt>
         <publicationStmt>
            <p>Information about publication or distribution</p>
         </publicationStmt>
         <sourceDesc>
            <p>Information about the source</p>
         </sourceDesc>
      </fileDesc>
  </teiHeader>
  <text>
      <body>
         <lg>
            <l>Roses are <abbr>red</abbr></l>
            <l>Violets are <del>blue</del></l>
            <l>Line <add>three</add></l>
         </lg>
         <lg>
            <l>Roses are red</l>
            <l>Line two</l>
            <l>Line three</l>
         </lg>
      </body>
  </text>
</TEI>

以下样式表:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:tei="http://www.tei-c.org/ns/1.0"
    exclude-result-prefixes="xs tei"
    version="1.0">
    <xsl:output method="html" encoding="UTF-8" indent="yes"/>
    
    <xsl:template match="/">
        <div class="wrapper">
            <xsl:apply-templates select="tei:TEI/tei:text/tei:body"/>
        </div>
    </xsl:template>
    
    <!--Block elements-->
    
    <xsl:template match="tei:lg">
        <div class="verse" style="padding: 2rem;">
            <xsl:apply-templates/>
        </div>
    </xsl:template>
    <xsl:template match="tei:l">
        <div class="verse-line">
            <xsl:apply-templates/>
        </div>
    </xsl:template>
    
    <!--Inline elements-->
    
    <xsl:template match="tei:abbr">
        <span class="abbr" style="color: red;">
            <xsl:apply-templates/>
        </span>
    </xsl:template>
    
    <xsl:template match="tei:del">
        <span class="del" style="color: blue;">
            <xsl:apply-templates/>
        </span>
    </xsl:template>
    
    <xsl:template match="tei:add">
        <span class="add" style="color: cyan;">
            <xsl:apply-templates/>
        </span>
    </xsl:template>
    
</xsl:stylesheet>

将输出此 HTML:

<div class="wrapper">
   <div class="verse" style="padding: 2rem;">
      <div class="verse-line">Roses are <span class="abbr" style="color: red;">red</span></div>
      <div class="verse-line">Violets are <span class="del" style="color: blue;">blue</span></div>
      <div class="verse-line">Line <span class="add" style="color: cyan;">three</span></div>
      </div>   
   <div class="verse" style="padding: 2rem;">      
      <div class="verse-line">Roses are red</div>
      <div class="verse-line">Line two</div>
      <div class="verse-line">Line three</div>
   </div>
</div>

它将与以下任何 XSLT 处理器一起工作:

  • Saxon6.5.5
  • 撒克逊-HE 9.9.1.7
  • 撒克逊-PE 9.9.1.7
  • 撒克逊-EE 9.9.1.7