2016-09-27 4 views
0

мозговой пердит, я понял, что проблема моя, спасибо!XSLT - соответствие шаблону шаблона

+0

Можете ли вы изменить свой вопрос, включив свой XSLT? (Вероятно, вы можете удалить переменную 'file-prefix', чтобы сэкономить место). Как замечательно, как http://xsltransform.net/, он длится долгое время, что затрудняет ответ на этот вопрос. Благодаря! –

+0

Я сделал, как вы сказали! :) – HelpMeWithXSLT

ответ

0

Прежде всего: этот стили очень сложный и приносит с собой так много «проблем». Пожалуйста, сделайте мне одолжение и спросите себя, если это правильный путь. Я сомневаюсь в этом.

Fix/Решение:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:java="org.dita.dost.util.GenUtils" exclude-result-prefixes="java"> 
    <xsl:param name="outdir.subsidiary"/> 

    <xsl:variable name="file-prefix"> 
     <xsl:choose> 
      <xsl:when test="string-length($outdir.subsidiary) &gt; 0 and not(substring($outdir.subsidiary,string-length($outdir.subsidiary))='/')and not(substring($outdir.subsidiary,string-length($outdir.subsidiary))='\')"> 
       <xsl:value-of select="translate($outdir.subsidiary, 
        '\/=+|?[]{}()!#$%^&amp;*__~`;:.,-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 
        '//=+|?[]{}()!#$%^&amp;*__~`;:.,-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')"/><xsl:text>/</xsl:text> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="translate($outdir.subsidiary, 
        '\/=+|?[]{}()!#$%^&amp;*__~`;:.,-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 
        '//=+|?[]{}()!#$%^&amp;*__~`;:.,-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')"/> 
      </xsl:otherwise> 

     </xsl:choose> 
    </xsl:variable> 


    <xsl:template match="*[(@class) and not(contains(@class,' asc/pnum ')) and not(contains(@class, ' third/fig-meta ')) and not(contains(@class,' asc/linum ')) and not(contains(@class, ' topic/image ')) and not(contains(@class,' asc/pgroup '))]"> 
     <xsl:variable name="generalize" select="substring-before(substring-after(@class,'/'),' ')" /> 
     <xsl:element name="{$generalize}"> 
      <xsl:copy-of select="@*"/> 
      <xsl:apply-templates/> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="node() | @*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node() | @*"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="data" priority="2"/> 
    <xsl:template match="image"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*" /> 
      <xsl:apply-templates select="../data" mode="map" /> 
      <xsl:apply-templates select="node()" /> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="*[contains(@class,' third/fig-meta ')]" mode="map"> 
     <alt><xsl:apply-templates select="@*|node()" /></alt> 
    </xsl:template> 

</xsl:stylesheet> 

Одно расстройства

XSLT сам решает, какой шаблон соответствует моему текущему узлу для обработки. Внутренний приоритет будет генерироваться в зависимости от правил сложности и точности совпадения. На этом фоне были выполнены неправильные шаблоны, и ваш результат не был похож на ожидаемый. Вы должны установить приоритет для шаблонов самостоятельно. Много раз это показатель, чтобы сделать это неправильно.

xsl:copy-of будет скопирован без оценки шаблонов. В вашем примере вы хотите выполнить последний шаблон, чтобы переименовать data в alt. =><xsl:apply-templates select="../data"/>.

<xsl:template match="*[contains(@class,' asc/fig-meta ')]"> ничего не соответствует. Изменено на <xsl:template match="*[contains(@class,' third/fig-meta ')]" mode="baum">. [см. «asc» vs «third»]

mode="map" не требуется, в противном случае шаблон для удаления data будет выполнен и выход не будет выполнен.

До сих пор мои два цента на ваш вопрос.

+0

Привет, спасибо за вашу помощь, он многое очистил, но, к сожалению, я не думаю, что он даст мне намеченные результаты, см. Обновленный: [http://xsltransform.net/ejivdGY/4] проблема в том, что первый шаблон соответствует (обобщение) вы исключили элементы из третьего/fig-meta, но мне нужны те, которые должны быть преобразованы в элементы данных. – HelpMeWithXSLT

+0

Для создания 'alt'-тегов существует отдельный шаблон, определенный для' third/fig-meta'. Извините, я не понимаю вашу проблему и ситуацию. Возможно, вы заявляете о своих требованиях, и xslt может быть реорганизован. – uL1

Смежные вопросы