XSLT шпаргалка: <xsl:value-of />

В данной статье хотелось бы рассказать про xslt конструкцию <xsl:value-of />.



Данная конструкуия является, наверно, самой простой и понятной. Она просто выводит то, что вы ей указали вывести. Это может быть текст внутри узла, содержимое атрибута и т.д. Позже, мы рассмотрим несколько примеров использования <xsl:value-of />.
Для начала посмотрим, что нам говорит о данной конструкции интернет:

Элемент <xsl:value-of /> - Вставляет значение выбранного узла в виде текста.

(взято с msdn.microsoft.com)

По факту, я бы сказал, что данная конструкция выводит в виде текста не только значение узла в виде текста, но и значение атрибута, параметра и переменной.
У конструкции <xsl:value-of /> есть два атрибута:

  • select - который указывает что именно вы хотите вывести. Тут можно поставить xPath выражение, которое укажет на какой-то узел или атрибут, название переменной или параметра, текст или число, какие-то xPath выражения с функциями, например - математические.
  • disable-output-escaping - атрибут, указывающий нужно ли экранировать содержимое, которое мы выводим. По умолчанию равен значению "no". Если вы выводите html текст, то стоит поменять значение данного атрибута на "yes"  иначе все теги, например <p> превратяться в текст вида &lt;p&gt;

Давайте ближе к примерам.

Возьмем маленький xml , который можно получить обратившить к любой странице в UMI.CMS, добавив .xml в конце её значения в адресной строке (например http://example.ru/test.xml)

<result module="content" method="content" domain="example.ru" system-build="49344" lang="ru" header="Тестовая страница" title="UMI.CMS - Тестовая страница" site-name="test site" request-uri="/test/.xml" pageId="7">
	<meta>
		<keywords>umihelp.ru UMI.CMS umi тестовый сайт</keywords>
		<description/>
	</meta>
	<user id="2" status="auth" login="admin" xlink:href="uobject://2" type="sv"/>
	<parents/>
	<page id="7" parentId="0" link="/test/" is-active="1" object-id="351" type-id="60" type-guid="content-page" update-time="1425309789" alt-name="test">
		<basetype id="30" module="content">Страницы контента</basetype>
		<name>Тестовая страница</name>
		<properties>
			<group id="84" name="common">
				<title>Общее</title>
				<property id="3" name="h1" type="string">
					<title>Поле H1</title>
					<value>Тестовая страница</value>
				</property>
				<property id="4" name="content" type="wysiwyg">
					<title>Контент</title>
					<value>
						<p>Вы находитесь на тестовой странице созданной для umihelp.ru проекта</p>
					</value>
				</property>
			</group>
			<group id="86" name="more_params">
				<title>Дополнительные параметры</title>
				<property id="12" name="show_submenu" type="boolean">
					<title>Показывать подменю</title>
					<value>1</value>
				</property>
				<property id="416" name="info_page" type="boolean">
					<title>Информационная страница</title>
					<value>1</value>
				</property>
			</group>
		</properties>
	</page>
</result>


xml страницы http://example.ru/test/

 

Затем, разберем несколько примеров вызова <xsl:value-of /> конструкции:

  1. Вывод значения конкретного узла. Например, название страницы из узла result/page/name . То, что мы только что написали, называется xPath выражением, которое указывает что именно нас интересует из имеющегося xml документа
    <xsl:value-of select="result/page/name" />
  2. Вывод значения из атрибута. Например, id текущей страницы из атрибута pageId , относящегося к узлу result
    <xsl:value-of select="result/@pageId" />
  3. Вывод значения из параметра (<xsl:param name="var1" select="123" />) или переменной (<xsl:variable name="var2" select="4567" />), которые были обозначенны выше в данном xslt шаблоне или являются глобальными (обозначены раньше всех xslt шаблонов)
    <xsl:value-of select="$var1" />
    <xsl:value-of select="$var2" />
  4. Вывод значения с отключением экранирования. Например, нам надо вывести значение (value) из узла property, содержащего значение html поля "Контент" (имеет атрибут name = 'content')
    <xsl:value-of select=".//property[@name='content']/value" disable-output-escaping="yes"/>
  5. Вывод произвольного текста. Текст необходимо обрамлять дополнительными кавычками отличными от кавычек для самого значения атрибута.
    <xsl:value-of select="'произвольный текст'" />
  6. Вывод произвольного числа.
    <xsl:value-of select="999" />
  7. Вывод xPath выражения, содержащего математическую функцию "(6+4) / 2". Про xPath функции можете почитать в википедии.
    <xsl:value-of select="(6 + 4) div 2" />

P.S. следует добавить, что  если в атрибуте select будет указанно xPath выражение, которое возвращает несколько результатов (например .//property/value), то <xsl:value-of />  будет выводить первый из результатов.



comments powered by HyperComments