Arhn - архитектура программирования

XSL Подсчет предшествующих узлов в поддереве

учитывая следующий XML

<?xml version="1.0"?><?xml-stylesheet type="text/xsl"?>

<root>

<hi>
<hello-world><greeter> a </greeter><greeter> b </greeter></hello-world>
<hello-world><greeter> c </greeter><greeter> d </greeter></hello-world> 
</hi>

<hi>
<hello-world><greeter> e </greeter><greeter> f </greeter></hello-world>
<hello-world><greeter> g </greeter><greeter> h </greeter></hello-world>
</hi>

</root>

Я перебираю каждый элемент greeter в поддеревьях hi, и мне нужно вывести положение элемента в узле, содержащем hi

Пока у меня есть этот XSL:

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

<xsl:template match="hi">

<xsl:for-each select="hello-world" >
<xsl:for-each select="greeter" >
   <xsl:value-of select="concat('+',count(ancestor::hi//greeter))" />
</xsl:for-each >
</xsl:for-each >

</xsl:template>

</xsl:stylesheet>

Однако это выводит:

+4+4+4+4
+4+4+4+4

В то время как мне нужно:

+1+2+3+4
+1+2+3+4

Я пробовал ancestor::hi//greeter, ancestor::hi//preceding::greeter , ancestor::hi//preceding-sibling:: приветствие и т. д. безрезультатно.

Как я могу этого добиться?

Спасибо за помощь

16.01.2014

Ответы:


1

Ошибка, которую вы совершаете, заключается в том, что вы поднимаетесь на уровень бабушек и дедушек и считаете внуков оттуда. Это число всегда одно и то же, независимо от того, кто из внуков спрашивает.

Вместо этого попробуйте что-то вроде:

<xsl:template match="/">
<xsl:for-each select="root/hi/hello-world/greeter" >
    <xsl:text>+</xsl:text>
    <xsl:number from="hi" level="any"/>
</xsl:for-each >
</xsl:template>

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

16.01.2014
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..