Книга: XSLT

Удаление содержимого

Удаление содержимого

Если ваше правило для узла не работает, то есть оно пусто, содержимое выбранного узла не будет скопировано в выходной документ. Таким способом при создании выходного документа можно выборочно удалять содержимое из исходного документа.

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

Листинг 3.7. Удаление содержимого

<?xml versiоn="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:strip-space elements="*"/>
 <xsl:output method="xml" indent="yes"/>
 <xsl:template match="/">
  <xsl:apply-templates/>
 </xsl:template>
 <xsl:template match="PLANETS">
  <xsl:apply-templates/>
 </xsl:template>
 <xsl:template match="PLANET">
  <xsl:copy>
   <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>
 <xsl:template match="NAME">
  <xsl:copy>
   <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>
 <xsl:template match="MASS">
  <xsl:copy>
   <xsl:value-of select="."/>
   <xsl:value-of select="@UNITS"/>
  </xsl:copy>
 </xsl:template>
 <xsl:template match="RADIUS">
 </xsl:template>
 <xsl:template match="DAY">
 </xsl:template>
 <xsl:template match="DENSITY">
 </xsl:template>
 <xsl:template match="DISTANCE">
 </xsl:template>
</xsl:stylesheet>

А вот результирующий документ (отметьте, что я сохранил только элементы <NAME> и <MASS>):

<?xml version="1.0" encoding="UTF-8"?>
<PLANET>
 <NAME>Mercury</NAME>
 <MASS>.0553(Earth = 1)</MASS>
</PLANET>
<PLANET>
 <NAME>Venus</NAME>
 <MASS>.815(Earth = 1)</MASS>
</PLANET>
<PLANET>
 <NAME>Earth</NAME>
 <MASS>1(Earth = 1)</MASS>
</PLANET>

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

Оглавление книги


Генерация: 0.617. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз