Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > XML, XSL > Вложенный xsl:for-each |
Автор: infarch 28.7.2015, 10:19 | ||||||
Здравствуйте. Мне нужно сформировать список элементов, в котором разметка и данные приходят из XML. Вот пример данных:
В результате должно получиться вот такое:
Я подготовил такой вот шаблон:
Однако я не могу понять как написать select. Внутренний цикл меняет контекст и я не могу обращаться к атрибутам файлов через './@a1'. Да и само имя атрибута теперь надо откуда-то взять... Наверно надо загнать в переменную, а как потом использовать? Подскажите пожалуйста! |
Автор: infarch 28.7.2015, 13:50 | ||
diadiavova, а как указать имя аттрибута через переменную? Я вот так получил доступ к контексту файла:
Вот тут: "select="$f/@a1" как вместо захардкодженого @a1 использовать переменную $a для получения нужного атрибута? |
Автор: diadiavova 28.7.2015, 14:01 | ||
name($a) |
Автор: infarch 28.7.2015, 14:06 |
name($a) возвращает строку "attr". А мне нужно взять значение этого атрибута из column и по значению взять один из аттрибутов file. Например, если attr="a2" то мне нужен <file a2="..." > |
Автор: diadiavova 28.7.2015, 14:53 |
Это и есть имя атрибута. Тогда так $a Так это уже совсем другой вопрос. //file[@a2 = $a] |
Автор: infarch 28.7.2015, 14:58 |
Так это опять таки не то, насколько я вижу. Таким образом мы находим файл который имеет атрибут а2 со значением из переменной а. Но я уже разобрался. Родилась вот такая конструкция "<xsl:value-of select="$f/@*[local-name()=$a]" />". Спасибо за участие ) |
Автор: diadiavova 28.7.2015, 16:02 | ||
Это выражение находит все элементы file, у которых есть атрибут, имя которого совпадает со значением переменной a и возвращает коллекцию значений этих атрибутов. Но поскольку ты передаешь это выражение в value-of, то оно возвратит значение первого из элементов в коллекции. Это точно именно то, что ты искал? И с local-name надо быть осторожнее, поскольку совпадение локальных имен - штука непредсказуемая. Если есть возможность, то лучше явно указать префиксы. |
Автор: infarch 28.7.2015, 16:15 |
В переменной F у меня единичный файл, полученный во внешнем цикле. Да и результат я получил именно такой как и был нужен ) Есть надежда что это будет работать. |