У меня есть таблица стилей XSLT 1.0, в которой нужно либо вывести значение определенного элемента, если этот элемент существует, либо вывести строку «NULL», если его нет.Как мне это сделать?
Обновление
Документ, с которым я работаю, выглядит примерно так:
<kanjidic2>
<header>
<file_version>4</file_version>
<database_version>2010-325</database_version>
<date_of_creation>2010-11-20</date_of_creation>
</header>
<character>
<literal>亜</literal>
<codepoint>
<cp_value cp_type="ucs">4e9c</cp_value>
<cp_value cp_type="jis208">16-01</cp_value>
</codepoint>
</character>
<character>
<literal>?</literal>
<codepoint>
<cp_value cp_type="ucs">226F3</cp_value>
<cp_value cp_type="jis213">2-12-48</cp_value>
</codepoint>
</character>
<!-- Plus a few thousand more <character>s -->
</kanjidic2>
Я пишу таблицу стилей XSLTпревратить вышесказанное в серию запросов MySQL.Первоначально я хотел вывести NULL, если с символом не была связана кодовая точка jis208 (отсюда мой первоначальный вопрос), создав такой запрос:
INSERT INTO `kanji` (`literal`, `ucs`, `jis208`, ...) VALUES ('亜', '4e9c', '16-01', ...);
INSERT INTO `kanji` (`literal`, `ucs`, `jis208`, ...) VALUES ('?, '226F3', NULL, ...);
С тех пор я понял, что могу сделатьXSLT проще и вместо этого создайте более короткий запрос:
INSERT INTO `kanji` (`literal`, `ucs`, `jis208`, ...) VALUES ('亜', '4e9c', '16-01', ...);
INSERT INTO `kanji` (`literal`, `ucs`, `jis213`, ...) VALUES ('?', '226F3', '2-12-48', ...);
Решение
<?xml version="1.0" encoding="UTF-8"?>
<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
<output method="text" encoding="UTF-8"/>
<template match="/">
<apply-templates select="kanjidic2/character"/>
</template>
<template match="/kanjidic2/character">
<text>INSERT INTO `kanji` (`literal`</text>
<apply-templates select="codepoint/cp_value" mode="first"/>
<text>) VALUES ('</text>
<value-of select="literal"/>
<apply-templates select="codepoint/cp_value" mode="second"/>
<text>); </text>
</template>
<template match="/kanjidic2/character/codepoint/cp_value" mode="first">
<text>, `</text>
<value-of select="@cp_type"/>
<text>`</text>
</template>
<template match="/kanjidic2/character/codepoint/cp_value" mode="second">
<text>, '</text>
<value-of select="."/>
<text>'</text>
</template>
</stylesheet>
Я отмечу ответ Дмитрия Новатчева как правильный, потому что это наиболее сжатое решение для моего начальный вопрос.
Спасибо за помощь.