Я пытаюсь создать HTML-страницу с помощью XSLT, но Oracle не генерирует! DOCTYPE. Работает на других инструментах XSL. Вот что я пытаюсь сделать:
declare
v_xml XMLType;
v_xsl XMLType;
v_result XMLType;
begin
v_xml := XMLType('<?xml version="1.0" encoding="utf-8"?><bindings></bindings>');
v_xsl := XMLType('<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes"
doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
doctype-system="http://www.w3.org/TR/html4/loose.dtd"
/>
<xsl:template match="/">
<html>
<head>
<title>Saluton</title>
</head>
<body>
<p>Saluton</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>');
v_result := v_xml.transform(v_xsl);
/* According to the docs, XMLTransform would be equivalent to the above.
-- But I get an error message stating that I must declare XMLTransform.
-- Why? What kind of declaration/import is expected? */
--v_result := XMLTransform(v_xml, v_xsl);
dbms_output.put_line(v_result.GetClobVal());
end;
Вывод:
<html>
<head>
<title>Saluton</title>
</head>
<body>
<p>Saluton</p>
</body>
</html>
Есть ли лучшее решение, кроме конкатенации типа документа, как в:
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">'
|| v_result.GetClobVal()?