2016-02-17 2 views
0

Мне нужно добавить растущий, не перезагружаемый порядковый номер для ВСЕХ элементов в XML, расположенных в их новой позиции. Я попытался использовать это в качестве атрибутаXSLT: Получение позиции элемента в новом XML

<xsl:value-of select="count(preceding::* | ancestor::*) + 1" /> 

Однако, это приведет к порядковым номерам, основываясь на первоначальном месте элемента в документе.

Мой оригинальный XML, созданный из нескольких файлов XML с «копией из»:

<title> 
    <article> 
    <paragraph> 
     <subparagraph> 
     </subparagraph> 
    </paragraph> 
    </article> 
</title> 

я удалить статью «ненужным» тег из нового XML с помощью XSLT. В результате этот:

<title id="1"> 
    <paragraph id="3"> 
    <subparagraph id="4"> 
    </subparagraph> 
    </paragraph> 
</title> 

результат я хочу:

<title id="1"> 
    <paragraph id="2"> 
    <subparagraph id="3"> 
    </subparagraph> 
    </paragraph> 
</title> 

Каков оптимальный путь для достижения этой цели?

+0

XSLT не отслеживает выходное дерево. Если вы не можете вывести требуемые цифры из ввода (например, **, а не ** подсчитывать узлы 'article'), выполните другой проход. –

+0

@ michael.hor257k Спасибо, я боялся, что это будет так. – tualinda

+0

Имейте в виду, что вы можете делать оба прохода в той же таблице стилей, если вы предпочитаете - путем вывода первого прохода в переменную. –

ответ

0

Использование

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

<xsl:template match="*"> 
    <xsl:copy> 
     <xsl:attribute name="id"> 
      <xsl:number count="*[not(self::article)]" level="any"/> 
     </xsl:attribute> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="article"> 
    <xsl:apply-templates/> 
</xsl:template> 

</xsl:stylesheet> 

вы можете рассчитывать элементы, которые вы заинтересованы.

+0

Спасибо за ответ. Однако, поскольку есть много узлов для пропусков, лучше всего сделать отдельный XSLT для нового XML для этой цели. – tualinda

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