Элемент xslif фильтр xml xslt


Содержание

Как добавить элемент в xml с помощью xslt и xsltproc?

У меня есть xml файл:

и я хотел бы добавить следующую часть в мой XML файл между частями и

Более короткое решение. Эта таблица стилей:

Примечание. Если вы хотите добавить Parameter1 только в том случае, если такого элемента нет в любой позиции, вы должны изменить шаблон для: Configuration/*[1][not(/Configuration/Parameter1)]

Этот XSLT вставляет указанный контент как дочерний элемент Configuration , перед Parameter2 .

XSLT Element

The XSLT element is used to specify a conditional test against the content of the XML file.

Parameter explanation

test: It specifies a condition in xml data to test.

XSLT Element Example

Let’s take an example to create a table of element with its attribute «id» and its child , , , and by iterating over each employee. Let’s take a condition which takes salary to be greater than 15000 and then prints the employee’s details.

Employee.xml

Employee.xsl

Output:

Help Others, Please Share

Join Javatpoint Test Series

Learn Latest Tutorials

Preparation

B.Tech / MCA

Javatpoint Services

JavaTpoint offers too many high quality services. Mail us on hr@javatpoint.com, to get more information about given services.

  • Website Designing
  • Website Development
  • Java Development
  • PHP Development
  • WordPress
  • Graphic Designing
  • Logo
  • Digital Marketing
  • On Page and Off Page SEO
  • PPC
  • Content Development
  • Corporate Training
  • >

Ulric Wilfred’s wiki

Let the wiki begin.

Облако тегов

Дерево навигации

Системные страницы

Добавить страницу

(X-Task: «On your Client! Get XML! Get XSL! Do XHTML! Go!»)

Вступление

Статья рассматривает преобразование XML в XHTML посредством XSLT на клиенте средствами JavaScript. К примеру, у вас есть какие-либо данные в виде XML, а вам требуется по какому-либо действию клиента (по клику на ссылке), оформить их в [X]HTML и динамически вставить в страницу. Это не так сложно, но по пути, как оказалось, встречается несколько подводных камней — в основном, относительно кросс-браузерности этого подхода и малой освещённости процесса в сети. Генерация XHTML-страниц средствами браузера (прямой запрос на XML файл, содержащий информацию о стиле) — это другая тема, она намного проще, и здесь затронута не будет.

Задача будет рассмотрена на банальном примере личного сайта. Дано: Файл с контактными данными (XML), некая главная страница (XHTML) и пять браузеров: Firefox 3, Opera 9.5, IE7, Safari 3, Google Chrome. На главной странице есть ссылка, при нажатии которой контактные данные преобразуются в несортированный список (UL) и отображаются в специально выделенной области прямо на этой странице. Это реальный рабочий пример, который я сейчас использую для создания своего сайта (ещё не выложенного).

Контактные данные, при их большом количестве, можно сгруппировать, поэтому XML-схема построена с учётом группировки элементов. Группа имеет краткое имя (shortname) для создания id у списка (возможно, потребуется оформить каждую группу по-особому) и, собственно, имя группы. XML-файл может содержать contact-ноды и вне групп, но в данном примере в этом нет необходимости. Все контакты имеют тип (type) для создания корректных ссылок в будущем (это мы также опустим). С остальным, вроде бы, всё понятно:

Структура довольно-таки проста, поэтому приведу сразу пример файла (любое сходство с реальными данными какого-либо индивидуума полностью случайно и приведено не намеренно):

Стиль генерирует XHTML-код, в виде списка UL, состоящего из негруппированных контактов и вложенных списков для групп. Поскольку результат вывода именно X HTML, требования к оформлению результата несколько строже, чем если бы это был обычный HTML. Поэтому следует обратить внимание на следующие моменты:

  • Важно: В результате преобразования должен получаться файл с одной и только одной корневой нодой, иначе Safari и Google Chrome (Читай: WebKit) не смогут добавить результирующий элемент в документ. Это довольно разумно, поскольку для всех XML объектов (результат в виде XHTML из их числа) есть правило: корневой элемент должен быть только один (There can be the only one).
  • Важно: В качестве xsl:output method должен быть указан либо xml либо html (однако, в последнем случае, при использовании пронстранств имён, таковые будут потеряны). Некоторые ставят это значение в xhtml и в результате получают некорректную обработку или ошибки на клиенте — пока этого метода не введено и не следует его использовать. Для этого есть media-type.
  • Код генерируется без заголовков XML: omit-xml-declaration установлен в yes и xmlns не указывается, иначе в результате получится недоXHTML-файл с XML-заголовком, не содержащий html, head и body. Генерация DOCTYPE (doctype-system, doctype-public) также отключена.

В результате преобразования получается такой блок XHTML:

JavaScript

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

Загрузка XML-файлов

Для начала нам потребуется загрузить оба файла — XML и XSLT. По своей природе они оба — файлы XML, Internet Explorer предоставляет для этих целей ActiveX-объект XMLDOM, Firefox и Opera — фунцию createDocument, позволяющую загрузить XML-файл в созданный объект. Safari и Chrome (Читай: WebKit), однако, предоставляя эту же функцию, возвращают объект, не поддерживающий загрузку — опять же, вполне разумно, в соответствии со спецификациями W3C.

Метод 1. XMLHttpRequest

Поэтому, плюнув на всё, мы можем загружать файлы через XMLHttpRequest (синхронный или нет — по вашему выбору), используя всем известный шаблон AJAX.

Предложу вам свою версию, вы же можете использовать какую только заблагорассудится. Моя версия отличается тем, что принимает в параметры функцию, которая будет вызвана при успешном завершении вызова, позволяет делать и POST и GET запросы, позволяет передавать объекты и позволяет делать синхронный вызов (тогда она возвращает объект по его завершению).

При использовании этого метода, функция загрузки XML будет выглядеть довольно просто — например, так:

Метод 2. В зависимости от браузера

Однако, если вы хотите использовать именно те способы, которые (как ни забавно) рекомендуются на W3Schools, функцию loadXML придётся усложнить, потому что приведённые на W3Schoolds примеры не работают на браузерах WebKit (Читай: Safari и Chrome). Пусть это будет, так сказать, «рекомендованный вид». Подозреваю, правда, что все эти обходы скрывают под собой те же вызовы XMLHttpRequest, поэтому, если вы не сторонник неоправданных действий, пропустите этот раздел.

Итак, функция будет делать прямой синхронный вызов XHMHttpRequest (вернее, функции описанной в предыдущем разделе) только в случае вызова из Safari, в остальных же случаях прибегать к средствам конкретного браузера (Не забываем правило: Никаких прямых проверок браузера, только проверка, поддерживается ли вызываемая функция):

В результате, функция возвращает XML-объект по заданному имени файла. Можно приступать собственно к трансформации.

Преобразование через XSLT

Преобразованием будет заниматься ещё одна функция, которая будет принимать в качестве аргументов пути к XML-файлу и XSL-файлу. Загружать эти файлы она будет описанной выше функцией loadXML. А возвращать эта функция будет строку с XHTML-кодом, который можно будет вставить прямо в innerHTML нужного элемента.

Почему строку? Потому что метод transformFragment объекта XSLTProcessor не поддерживает рендеринг XML (xsl:output method="xml"), а поддерживает только HTML (xsl:output method="html"). В результате преобразования с xsl:output method="xml" и transformFragment генерируется корректный DocumentFragment, который, однако, при вставке в XHTML-код действует как некая XML-нода — поэтому визуально виден только, так называемый, plain text. Если вас не смущает потеря пространств имён, вы можете изменить xsl:output method на html и использовать transformFragment, добившись в результате, чтобы функция возвращала DocumentFragment.

В случае Internet Explorer используется функция transformNode XML-объекта, в остальных браузерах используется XSLTProcessor.

Всё, весь необходимый код готов и вы можете использовать функцию getStylingResult для преобразования XML-файлов и вставки результата в XHTML. Например, таким образом:

Как итог, мы получили действительно кросс-браузерную версию обработки XML на клиенте. Спасибо за внимание.

Как написать XSLT для записи if, else if, else if и выбрать значение в цикле foreach [duplicate]

Я пытаюсь реализовать инструкцию if -else в XSLT, но мой код просто не анализирует. Кто-нибудь есть идеи?

4 ответа

Вы должны переопределить его с помощью метки :

Если оператор используется для проверки только одного условия быстро. Если у вас есть несколько опций, используйте , как показано ниже:

Кроме того, вы можете использовать несколько тегов для выражения If .. Else If или Switch паттернов, как показано ниже:

Предыдущий пример был бы эквивалентен псевдокоду ниже:

Стилевые таблицы XSL

В предыдущем разделе для вывода элементов XML-документа на экран броузера мы применяли Java Script-сценарии Однако, как уже отмечалось, для этих целей предпочтительней использование специально предназначенного для этого средства — стилевых таблиц XSL (Extensible Stylesheet Language).

Стилевыми таблицами (стилевыми листами) принято называть специальные инструкции, управляющие процессом отображения элемента в окне программы-клиента(например, в окне броузера). Предложенные в качестве рекомендация W3C, каскадные стилевые таблицы (CSS-Cascading Style Sheets) уже больше года используются Web-разработчиками для оформления Web-страниц.

Поддержка CSS наиболее известными на сегодняшний день броузерами Opera и Microsoft Internet Explorer (начиная с версии 3.0) и Mozilla Firefox позволила использовать стилевые таблицы для решения самого широкого спектра задач — от оформления домашней странички до создания крупного корпоративного Web-узла. Слово каскадные в определении CSS означает возможность объединения отдельных элементов форматирования путем вложенных описаний стиля. Например, атрибуты текста, заданные в тэге , будут распространяться на вложенные тэги до тех пор, пока в них не встретятся стилевые описания, отменяющие или дополняющие текущие параметры. Таким образом, использование таблиц CSS в HTML было весьма эффективно — отпадала необходимость явного задания тэгов форматирования для каждого из элементов документа.

Являясь очень мощным средством оформления HTML-страниц, CSS-таблицы, тем не менее, не могут применяться в XML-документах, т.к. набор тэгов в этом языке не ограничен и использование статических ссылок на форматируемые объекты документа в этом случае невозможно.

Поэтому для форматирования XML-элементов был разработан новый язык разметки, являющийся подмножеством XML, и специально был предназначен для форматирования XML-элементов.

Некоторые его отличия от CSS:

Во-первых, стилевые таблицы XSL позволяют определять оформление элемента в зависимости от его месторасположения внутри документа, т.е. к двум элементам с одинаковым названием могут применяться различные правила форматирования.
Во-вторых, языком, лежащем в основе XSL, является XML, а это означает, что XSL более гибок, универсален и у разработчиков появляется возможность использования средства для контроля за корректностью составления таких стилевых списков(используя DTD или схемы данных)
В-третьих, таблицы XSL не являются каскадными, подобно CSS, т.к. чрезвычайно сложно обеспечить «каскадируемость» стилевых описаний, или, другими словами, возможность объединения отдельных элементов форматирования путем вложенных описаний стиля, в ситуации, когда структура выходного документа заранее неизвестна и он создается в процессе самого разбора. Однако в XSL существует возможность задавать правила для стилей, при помощи которых можно изменять свойства стилевого оформления, что позволяет использовать довольно сложные приемы форматирования

В настоящий момент язык XSL находится на стадии разработки в W3C[3] и в будущем, видимо, станет частью стандарта XML. Это означает, что использование этого механизма является наиболее перспективным способом оформления XML-документов. В текущем рабочем варианте W3C, XSL рассматривается не только как язык разметки, определяющий стилевые таблицы — в него заложены средства, необходимые для выполнения действий по фильтрации информации, выводимой в окно клиента, поиска элементов, сложного поиска, основанного на зависимостях между элементами и т.д.

На сегодняшний день единственным броузером, поддерживающим некоторые из этих возможностей, является бэта-версия Internet Explorer 5.0, однако в самом ближайшем будущем, безусловно, XSL будет использоваться также широко, как сегодня стандартные тэги HTML

В этом разделе мы рассмотрим упрощенную объектную модель XSL-документа, используемую в текущей версии XSL-конвертора Microsoft msxsl, и поэтому информацию, изложенную далее, нельзя считать описанием стандарта языка. Полный рабочий вариант спецификации XSL в последней его редакции доступен на сервере.

Все примеры, приводимые далее, могут быть проверены при помощи XSL-конвертора, свободно доступного на странице Mcrosoft (www.microsoft.com/xml/xsl/)

С чего начать

Принцип обработки XML-документов стилевыми таблицами заключается в следующем: при разборе XSL-документа программа-анализатор обрабатывает инструкции этого языка и каждому элементу, найденному в XML-дереве ставит в соответствие набор тэгов, определяющих форматирование этого элемента. Другими словами, мы задаем шаблон форматирования для XML-элементов, причем сам этот шаблон может иметь структуру соответствующего фрагмента XML-документа. Инструкции XSL определяют точное месторасположение элемента XML в дереве, поэтому существует возможность применять различные стили оформления к одинаковым элементам, в зависимости от контекста их использования.

В общем случае, XSL позволяет автору задавать параметры отображения элемента XML, используя любые языки, предназначенные для форматирования — HTML, RTF и т.д. В этом разделе мы будем использовать в качестве такого языка HTML, т.к. документы, созданные при помощи этого языка разметки могут просматриваться любой подходящей программой просмотра Web-страниц
Структура XSL-таблиц

Рассмотрим основные структурные элементы XSL, используемые, в частности, в конверторе msxsl, для создания оформления XML-документов.

Правила XSL

XSL-документ представляет собой совокупность правил построения, каждое из которых выделено в отдельный блок, ограниченный тэгами и ;. Правила определяют шаблоны, по которым каждому элементу XML ставится в соответствие последовательность HTML-тэгов, т.е. внутри них содержатся инструкции, определяющие элементы XML-документа и тэги форматирования, применяемые к ним.

Элементы XML, к которым будет применяться форматирование, обозначаются в XSL дескриптором ;. Для указания элемента с конкретным названием (название элемента определяется тэгами, его обозначающими), т.е. определения класса элемента, можно использовать атрибут type=» «

Вот пример простейшего XSL-документа, определяющего форматирование для фрагмента rose :

Уже на этом примере можно проследить особенность использования стилевых таблиц: в любых правилах при помощи соответствующих элементов декларативно задается область, которая определяет фрагмент XML-документа, как мы чуть позже увидим, программа-анализатор заново проходит все элементы, начиная с текущего, всякий раз, когда в структуре XML-документа обнаруживаются новые вложенные элементы.

Инструкция указывает на то, что данное правило определяет элемент. Параметром type=»flower» задается название XML-элемента, для которого будет использоваться это правило. Программа-конвертор будет использовать HTML-тэги, помещенные внутри блока для форматирования XML-элемента, которому «предназначался» текущий блок. В том случае, если для какого-то элемента XML шаблон не определяется, в выходной документ будут добавлены тэги форматирования по умолчанию (например,

Процесс разбора XSL-правил является рекурсивным, т.е. если у элемента есть дочерние элементы, то программа будет искать определения этих элементов, расположенных «глубже» в дереве документа. Указанием на то, что необходимо повторить процесс разбора XML документа, теперь уже для дочерних элементов, является инструкция . Дойдя до нее, анализатор выберет из иерархического дерева XML-элементов нужную ветвь и найдет в XSL-шаблонах правила, определяющие форматирование этих нижележащих элементов. В том случае, если вместо мы укажем инструкцию ;, программа закончит движение по данной ветви и возвратится назад, в родительское правило. При этом текущее правило никакой информации в выходном HTML-документе изменять не будет, т.к. в данном случае означает, что содержимое элемента отсутствует.

Если в одном правиле используется несколько раз, то инструкции по форматированию будут распространены на все описываемые внутри него XML-элементы, т.е. можно задавать единый шаблон форматирования для нескольких элементов одновременно:

Ниже приведен пример более сложного XSL-описания, некоторые фрагменты которого будут пояснены позже.

Корневое правило

Разбор любого XSL-документа всегда начинается с правила для корневого элемента, в котором определяется область всего разбираемого XML документа и поэтому тэги форматирования, помещенные сюда, будут действовать на весь документ в целом. Для обозначения корневого правила необходимо включить в него элемент ;. Например, для того, чтобы задать тэг для формируемой нами выходной HTML-страницы, мы можем использовать следующий фрагмент:

В этом примере при помощи инструкций и мы определили ряд начальных и конечных HTML-тэгов для нашей страницы, между которыми затем в процессе рекурсивного обхода XSL-анализатора будут помещены остальные элемента документа.

В том случае, если мы не определяем правило для корневого элемента, разбор документа начнется с первого правила с инструкцией (для оформления же заголовка документа будет использован образец форматирования, применяющийся по умолчанию).

Отношения между элементами

Дочерние элементы в XML-документе всегда находятся внутри области, определяемой тэгами родительского по отношению к ним элемента. Для того, чтобы точно указать месторасположение обрабатываемого элемента в дереве XML, в XSL используется дополнительный тэг ;. При помощи него можно указать, какие элементы должны предшествовать текущему, а какие — следовать после него. Например, в следующем фрагменте определяется, что форматирование элемента будет зависеть от его месторасположения внутри XML-документа:

Как видно из примера, если в XML-документе будет найден элемент , являющийся дочерним по отношению к элементу (название статьи), то его форматирование будет несколько отличаться от элемента , расположенного внутри тэгов

Приоритеты правил

В том случае, если внутри XSL-документа встречается несколько правил для одного и того же элемента, то msxsl будет использовать то из них, которое более точно определяет позицию данного элемента. Т.е. если XSL-документ содержит следующие правила:

, то при использовании этой стилевой таблицы в случае, когда элемент является потомком , к нему будет применено первое правило. Для любых же других элементов будет действовать правило без тэга

В общем случае приоритет правил определяется следующим образом (в порядке убывания приоритета):

* правила, помеченные специальным тэгом
* правила с наибольшим значением атрибута id, если он определен
* правила с наибольшим значением атрибута class, если он определен
* правила, имеющие наибольшую вложенность, определяемую тэгом
* правила, использующие атрибут type совместно с
* правила, в которых отсутствует атрибут type в или
* правила с более высоким приоритетом, задаваемым атрибутом priority тэга
* правила с наибольшим значением квалификаторов ,

Использование атрибутов элементов

Фильтрация элементов


Одним из самых мощных средств XSL является возможность сортировки и выборки элементов, выделяемых из общего дерева элементов документа. Для этого используется элемент ;, который заменяет в правилах, определяя те элементы, которые следует обработать в процессе рекурсивного обхода. Например, в следующем примере будут обработаны только элементы :

Элемент сам по себе не определяет шаблон форматирования, он лишь управляет работой анализатора, обозначая, подобно , «нижележащие» элементы. В приведенном примере элемент должен быть расположен внутри элемента

Для того, чтобы в шаблоне выделить не только собственные дочерние элементы, но и дочерние элементы потомков, т.е. использовать несколько уровней вложенности, необходимо задать параметр from = «descendants». Если параметр имеет значение «children», что указывает на то, что выбор должен производится из списка собственных дочерних элементов, то атрибут from может опускаться, т.к. «children» является значением по умолчанию.
Правила стилей

В отличие от CSS, в XSL невозможно использование каскадных стилевых определений(т.е. нельзя использовать несколько правил для определения стиля одного того же элемента), т.к. такие ограничения вводит рекурсивный алгоритм работы программы — анализатора. Однако использование правил определения стиля(Style Rules) элемента позволяет каким-то образом скомпенсировать этот недостаток.

Для определения правила стилевого оформления необходимо воспользоваться элементом ;, который используется точно также, как и , но инструкции, содержащиеся в нем, никак не влияют на структуру выходного документа. Поэтому все команды внутри этого правила должны описываться в рамках элемента . Вот как будет выглядеть, например, определение стиля для элемента rose ;:

Если бы мы не определили правила , то в выходной документ не было бы помещено никакой информации, т.к. элемент только определяет параметры стилевого оформления, не предпринимая никаких других действий.

Также надо учитывать, что XSL-анализатор использует CSS для определения задаваемого правилами стиля в выходном HTML-документе, тем самым предоставляя нам возможность использования этого мощного средства при оформлении HTML-страниц После обработки приведенного в примере фрагмента в выходной документ будут помещены следующие элементы:

Еще один пример:

Стили в формате CSS:

Фрагмент XSL-документа, позволяющего использовать подобные стилевые определения:

Сценарии

Сценарии могут использоваться в документах XSL точно также, как и в HTML. Кроме того, сценарии, содержащиеся внутри XSL-документа и запускаемые броузером в процессе обработки документа могут динамически создавать HTML-документы, извлекая необходимую для этого информацию непосредственно из элементов XSL-документа.

Для написания сценариев XSL использует специальный скриптовый язык — ECMAScript. Однако в msxsl для этих целей можно применять Microsoft JavaScript — язык, который объединил в себе некоторые элементы стандартного JavaScript и ECMAScript.
Вычисление выражений

Наиболее простым примером использования сценариев в XSL -документе является вычисление значений параметров описываемых элементов. Для этого надо просто поставить знак равенства в качестве первого символа параметра, что заставит XSL-процессор вычислить значение выражения(синтаксис этого выражения должен отвечать требованиям JavaScript). Например, после разбора этого правила:

в выходном документе окажутся следующие инструкции:

Очень часто в правилах XSL необходимо использовать атрибуты описываемого в них элемента. Для этого мы должны воспользоваться методом getAttribute(), описанным в объектной модели XML (мы рассматриваем объектную модель XML-документов, предложенную Microsoft, список этих функций приведен в конце раздела). Т.к. каждому элементу XSL доступен указатель на соответствующий ему объект, сценарий может обращаться к внутренним функциям и свойствам этих элементов, при помощи которых и осуществляются необходимые действия.

Для того, чтобы использовать этот атрибут в выходном HTML-документе, необходимо определить следующее правило:

После обработки этого фрагмента в выходной документ будет помещен элемент:

Другим способом помещения в выходной HTML-документ информации, являющейся результатом выполнения каких-либо операций JavaScript – сценариев является использовнаие инструкции ;:

Метод childNumber в данном случае возвращает текущий номер дочернего элемента.
Определение функций и глобальных переменных

Если использовать эти правила для следующего XML-документа:

то в результате мы получим такой HTML-файл:

Элемент

Элемент позволяет применять тело шаблона в цикле снова и снова для всех элементов набора узлов. С технической точки зрения, он работает с набором узлов, который возвращает выражение XPath и выполняет одно и то же действие с каждым узлом в наборе. При каждом шаге цикла тело шаблона применяется к следующему узлу из набора узлов, что дает возможность легко обрабатывать несколько узлов.

Вы могли заметить, что это описание практически такое же, как и у элемента , и я сравню элементы и через несколько страниц.

У элемента один атрибут:

• select (обязательный). Принимает значение выражения XPath, возвращающее набор узлов, который нужно обработать в цикле.

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

В теле шаблона функция position возвращает позицию текущего узла в наборе узлов, a last возвращает число узлов в наборе. Если не используется, узлы обрабатываются в порядке документа (в порядке, в котором они перечислены в документе); если же используется элемент , набор узлов будет сначала отсортирован в порядке, заданном этим элементом.

Предположим, нам нужно отформатировать все названия планет, заключив их в элементы HTML , — это можно сделать следующим образом:

Но что делать, если у некоторых планет по два названия, как, например:

Mercury

Closest planet to the sun

Это проблема, поскольку атрибут select элемента сам по себе выберет только первый элемент . Чтобы пройти в цикле все возможные варианты, вместо него следует применить элемент (листинг 5.7).

Листинг 5.7. Применение

Эта таблица стилей охватывает все элементы , помещает их значения в элемент и добавляет их в выходной документ следующим образом:

Closest planet to the sun

Вот еще один пример, впервые появившийся в главе 3, «Создание и применение шаблонов», где при помощи элемента в цикле перебирались все атрибуты элемента:

Следующий пример появился в главе 2, «Создание и применение таблиц стилей». Это упрощенная таблица стилей, в которой нельзя использовать какие-либо элементы высокого уровня, то есть нельзя использовать или , однако можно пройти по узлам в цикле при помощи :

The Planets Table

The Planets Table

Radius

Эта упрощенная таблица стилей форматирует planets.xml в planets.html практически так же хорошо, как и шаблон, использующий , в связи с чем появляется интересный вопрос: когда следует для прохода по узлам применять , а когда ?

Как правило, хорошо применять в тех случаях, когда организация дочерних узлов неизвестна, и вы хотите применить различные шаблоны к потомкам разных видов — независимо от количества уровней, на которые углубляется их структура. С другой стороны, если дочерние узлы обладают регулярной, хорошо определенной организацией, можно задать для обработки всех этих узлов.

Элемент работает во многом так же, как и ; можно даже вкладывать шаблоны при помощи , как это делается при помощи последовательных элементов . В листинге 5.8 я прохожу в цикле по каждому элементу

, а затем во вложенном в него цикле по всем элементам, содержащимся в элементе

, перечисляя их данные из элементов DATA> следующим образом.

How to. Памятка, Сниппеты, куски кода,

Страницы

Поиск по этому блогу

понедельник, 24 июня 2013 г.

Шаблон XSLT. Трансформируем XML.

В исходном xml файле указываем ссылку на xsl-файл

.
Шаблон файл ex1.xsl

Выбор пути [фильтром] в цикле

Задача. Пробежаться по всем веткам внутри родителя и сложить (отнять) соответствующие суммы
Ребенок1/Сумма/Итого + Ребенок2/Сумма/Итого
Ребенок1/Сумма/Январь + Ребенок2/Сумма/Январь

Кратко XPATH
match =»/» — указывает на корень документа
match =»Parent/Child/» — путь к ребенку
match = «//Child» — найдет всех детей независимо от того где он (детеныш) находится
«//» — называется оператором рекурсивного спуска
match = «Parent|Child» — список дочерних элементов

Предикаты (в скобках сокращение)

Поиск/индексация
[] — оператор фильтра
child::price[price=23.00] возвращает множество узлов, где элемент price имеет значение 23.00

Для поиска элемента по индексу используются []
Parent/Child[0] — первый ребенок
Parent/Child[last()] — последний ребенок
Для явного задания порядка вычисления выражений используются скобки ()
Parent/Child[0] — первый ребенок у каждого родителя
(Parent/Child)[0] — первый Child из всего набора элементов y внутри элементов Parent.
Parent[0]/Child[0] — первый Parent, первый Child

XPATH поддерживает числовые выражения (+, -, *. ), сравнение ( , !=. ) и около 27 функций для стандарта 1.0.

Функции (числовые, строковые, булевы). В стандарте 2.0 эта область была расширена, например, вместо round — округление до целого появилась более «продвинутая» функция round-half-to-even( ).

фильтр элементы XML-с XSLT

я следующий XML-файл:

И я хочу, чтобы получить выходной XML фильтруется в зависимости от атрибута ид ребенка2 тега. Для этого у меня есть следующие: XSLT

Таким образом, вывод должен быть следующим образом:

Но я не могу получить его, что случилось с моей XSLT?

EDIT: Обновление XSLT, потому что это была опечатка

Создан 22 май. 15 2015-05-22 11:38:40 Manuelarte

Что необходимо для фильтрации атрибута id тега child2? Сам тег? Или родитель? – potame 22 май. 15 2015-05-22 12:05:13

Мне нужно отфильтровать теги child2, как описано в выводе. – Manuelarte 22 май. 15 2015-05-22 20:11:01

1 ответ

соответствует элемент с именем xn:child . В вашем XML нет такого элемента. Возможно, вы имели в виду:


Примечание: объявление пространства имен не может появиться в объявлении XML. Кроме того, если вы хотите, чтобы ваш префикс соответствовал узлам в данном пространстве имен, вы должны привязать его к тому же самому URI пространства имен, что и тот, который используется в XML-вводе (сам префикс может быть любым).

Вопрос по margin, html, css &#8211 Margin-Top не работает для элемента span?

Может кто-нибудь сказать мне, что я неправильно закодировал? Все работает, единственное, что сверху нет запаса.

HTML:

CSS:

Похоже, вы пропустили некоторые параметры, попробуйте добавить:

В отличие от div , p 1 которыеУровень блока элементы, которые могут занимать margin на всех сторонах, span 2 не может, так как этоВ соответствии элемент, который занимает поля только по горизонтали.

Margin properties specify the width of the margin area of a box. The ‘margin’ shorthand property sets the margin for all four sides while the other margin properties only set their respective side. These properties apply to all elements, but vertical margins will not have any effect on non-replaced inline elements.

Демо 1 (по вертикали margin не применяется как span является inline элемент)

Решение? Сделай свой span элемент, display: inline-block; или же display: block; .

Предложил бы вам использовать display: inline-block; как будет inline так же как block , Делая это block только приведет к тому, что ваш элемент будет отображатьсяon another line, как block элементы уровня берут 100% горизонтального пространства на странице, если они не сделаны inline-block или они floated в left или же right .

XSL: управляющие инструкции xsl:for-each, xsl:if, xsl:choose, xsl:when, xsl:otherwise

Ходом выполнения преобразования в XSLT, как и в других языках программирования, можно управлять. Для этого предусмотрены инструкции xsl:for-each , xsl:if , xsl:choose , xsl:when , xsl:otherwise .

Инструкция xsl:for-each

Инструкция xsl:for-each позволяет организовать циклическую обработку узлов, или, проще говоря, повторение. Она будет полезна если для ряда узлов необходимо выполнить одни и те же действия.

Синтаксис:

Атрибуты:

  • select – обязательный атрибут, содержит выражение на языке XPath, результатом обработки которого должен быть набор узлов. Для каждого узла из этого набора будут выполнены инструкции и фиксированные конечные элементы, содержащиеся внутри инструкции xsl:for-each . Узлы обрабатываются в том порядке, как они следуют в исходном дереве, если нет указаний относительно сортировки.

Инструкция xsl:if

Инструкция xsl:if позволяет выполнить обработку с условием. Она аналогична конструкции if-then, присутствующей во многих языках программирования.

Синтаксис:

Атрибуты:

  • test – обязательный атрибут, задает выражение на языке XPath. Это выражение обрабатывается, а его результат преобразуется в булево значение. Если результатом является true , содержащиеся внутри элемента xsl:if инструкции и фиксированные конечные элементы выполняются. Если результатом является false , никаких действий не производится.

Инструкции xsl:choose , xsl:when , xsl:otherwise

Инструкции xsl:choose , xsl:when , xsl:otherwise образую конструкцию, которая позволяет выполнить более сложную по сравнению с инструкцией xsl:if обработку с условием. Она позволяет выбрать из нескольких альтернативных вариантов один.

Синтаксис:

Элемент xsl:choose содержит один или несколько элементов xsl:when и необязательный элемент xsl:otherwise . Элементы xsl:when и xsl:otherwise содержат другие инструкции и фиксированные конечные элементы. Когда процессор встречает конструкцию xsl:choose , он поочередно проверяет все содержащиеся в ней элементы xsl:when .

Каждый элемент xsl:when имеет единственный атрибут test , являющийся обязательным. Значением данного атрибута является выражение на языке XPath. Это выражение обрабатывается, а его результат преобразуется в булево значение. Если результатом является true , содержащиеся внутри элемента xsl:when инструкции и фиксированные конечные элементы выполняются, и обработка конструкции xsl:choose прекращается. То есть выполняется содержимое только первого элемента xsl:when , при проверке которого было получено true .

Если результатом является false , процессор переходит к следующему элементу xsl:when . Если ни один из элементов xsl:when не показал true , выполняются инструкции из элемента xsl:otherwise . Если же он отсутствует, то никаких действий не производится вообще.

Илон Маск рекомендует:  padding-bottom в CSS
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL