Нужно взять недавний стиль из тега html через xslt - PullRequest
0 голосов
/ 19 февраля 2011
<TD style="vertical-align:top;padding-left:5.4pt; padding-right:5.4pt;border-top-color:#000000;border-top-color:#5F497A;width:159.60000000000002pt;">    
    <P style="margin-bottom:0pt;">
      <SPAN style="font-weight:bold;">One</SPAN>
       <SPAN style="font-weight:bold;">: 3pt blue</SPAN>
   </P>
</TD>

Привет всем,

Это мой пример части входного HTML, и я использую xslt 1.0.Здесь border-top-color встречается дважды. Но в xslt я должен взять недавний стиль (border-top-color:#5F497A;).Как это сделать?. Или любое другое решение (предварительная обработка через Java) .. Пожалуйста, помогите мне .. Спасибо заранее ..

Ответы [ 3 ]

1 голос
/ 19 февраля 2011

Более семантически правильный, эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:variable name="vReverse">
            <xsl:call-template name="reverse">
                <xsl:with-param name="pString"
                     select="concat(';',/TD/@style,';')"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:variable name="vAfter">
            <xsl:call-template name="reverse">
                <xsl:with-param name="pString"
                    select="substring-before($vReverse,':roloc-pot-redrob;')"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:value-of select="substring-before($vAfter,';')"/>
    </xsl:template>
    <xsl:template name="reverse">
        <xsl:param name="pString"/>
        <xsl:if test="$pString">
            <xsl:call-template name="reverse">
                <xsl:with-param name="pString" select="substring($pString,2)"/>
            </xsl:call-template>
            <xsl:value-of select="substring($pString,1,1)"/>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

Вывод:

#5F497A

Выражение XPath 2.0:

substring-after(
   tokenize(/TD/@style,';')[
      contains(.,'border-top-color')
   ][last()],
   ':'
)
0 голосов
/ 19 февраля 2011

Насколько вы используете xslt 1.0, попробуйте это:

<xsl:variable name="attr" select="'border-top-color'"/>
<xsl:value-of select="concat(substring-before(@style, $attr),
                             $attr,
                             substring-after(substring-after(@style, $attr), $attr))" 
/>

Если вы хотите получить только код цвета, это можно сделать следующим образом:

<xsl:value-of select="concat('#', substring-before(substring-after(substring-after(@style, '#'), '#'), ';'))"/>
0 голосов
/ 19 февраля 2011

Вы должны использовать комбинацию substring-after и substring-before, например:

<xslt:value-of select="substring-before(substring-after(@style, 'border-top-color'), ';')"/>

Предполагается, что за значением стиля будет следовать точка с запятой. Если это не всегда так, вы можете использовать функцию xslt contains для проверки.

Справочник по функциям XSLT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...