Как Вы производите путь элемента тока в XSLT?

  1. Добавьте новый столбец в таблицу, используя интерфейс
  2. Напишите имя столбца и заполните и другую информацию
  3. В поле проверки не снимайте флажок и пишите «INCREMENT BY 1» в нем.

Вуаля !!

24
задан Daniel Haley 11 April 2012 в 19:50
поделиться

2 ответа

Не думайте, что это встроено в XPath, вам, вероятно, понадобится рекурсивный шаблон, подобный тому здесь , на котором я основал этот пример. Он пройдется по каждому элементу в XML-документе и выведет путь к этому элементу в стиле, аналогичном тому, который вы описали.

<?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"
      exclude-result-prefixes="xs"
      version="2.0">

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

    <xsl:template match="//*">
        <path>
        <xsl:for-each select="ancestor-or-self::*">
            <xsl:call-template name="print-step"/>
        </xsl:for-each>
        </path>
        <xsl:apply-templates select="*"/>
    </xsl:template>

    <xsl:template name="print-step">
        <xsl:text>/</xsl:text>
        <xsl:value-of select="name()"/>
        <xsl:text>[</xsl:text>
        <xsl:value-of select="1+count(preceding-sibling::*)"/>
        <xsl:text>]</xsl:text>
    </xsl:template>

</xsl:stylesheet>

Есть несколько сложностей; рассмотрим это дерево:

<root>
  <child/>
  <child/>
</root>

Как определить разницу между двумя дочерними узлами? Итак, вам нужен некоторый индекс в вашей последовательности элементов, например, child 1 и child [2].

7
ответ дан 28 November 2019 в 23:47
поделиться

Вы можете использовать предок XPath Axes для обхода всех родителей, бабушек и дедушек.

<xsl:for-each select="ancestor::*">...
3
ответ дан 28 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: