У меня есть XML, который выглядит следующим образом:XSL шаблон матч на атрибут родительского
<section class="DoCO:Section">
<h1 class="DoCO:SectionTitle" id="42" page="3" column="2">EXPERIMENT</h1>
<region class="DoCO:TextChunk" id="43" page="3" column="2">lots of body<xref ref-type="bibr" rid="R7" id="35" class="deo:Reference">7</xref> text</region>
<region class="DoCO:FigureBox" id="F4">
<image class="DoCO:Figure" src="2cn.page_003.image_04.png" thmb="2cn.page_003.image_04-thumb.png"/>
<caption class="deo:Caption" id="44" page="3" column="2">Figure 4: Experimental Setup</caption>
</region>
Я использовал следующий XSL для сопоставления элементов внешних ссылок по отдельности:
<xsl:for-each select="article/body/section">
<sec>
<xsl:for-each select="h1">
<title>
<xsl:value-of select="string(.)"/>
</title>
</xsl:for-each>
<xsl:for-each select="region">
<p>
<xsl:apply-templates/>
</p>
</xsl:for-each>
</xsl:template>
<xsl:template match="xref">
<xref/>
</xsl:template>
Однако, Я хочу иметь возможность группировать элементы изображения и субтитров вместе в пределах данного региона, не изменяя в настоящее время очень открытый способ обработки элементов региона, поэтому я пытаюсь сделать следующее:
<xsl:template match="@class[.='DoCO:FigureBox']">
<fig xmlns:xlink="http://www.w3.org/1999/xlink">
<graphic>
<xsl:for-each select="image">
<xsl:attribute name="xlink:href">
<xsl:value-of select="@src"/>
</xsl:attribute>
</xsl:for-each>
</graphic>
<caption>
<xsl:for-each select="caption">
<xsl:value-of select="string(.)"/>
</xsl:for-each>
</caption>
</fig>
</xsl:template>
Но match = "@ class [. = 'DoCO: FigureBox']", похоже, не срабатывает. Невозможно ли сопоставить атрибут родителя xsl: apply-templates так же, как вы можете сопоставить дочерний элемент?
Спасибо!
Не могли бы вы дать образец вашего ожидаемого результата в этом случае, просто чтобы понять, чего вы пытаетесь достичь? Благодаря! –