Задать вопрос
1010101001000100110100111
@1010101001000100110100111

Два-в-одном: XML+XSLT?

Вот, решил: вы*нуться запихнуть шаблон XSLT внутрь XML, (аналогично включению таблицы стилей CSS внутрь [X]HTML) чтоб потом на выходе получить валидную XTHML-страницу. Ну, и до-кучи, доктайп-декларацию впендюрил еще.



Вот, значит, какую хрень я тут нафигачил:
<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type="text/xml" href="#xstyle"?>

<!DOCTYPE doc [
<!ELEMENT doc (xsl,component)>
<!ELEMENT component (software)>
<!ELEMENT software (#PCDATA)>
<!ELEMENT xsl (xsl:stylesheet)>

<!ELEMENT xsl:stylesheet (xsl:output, xsl:template*)>
<!ATTLIST xsl:stylesheet
  version CDATA #REQUIRED
  id ID #REQUIRED
  xmlns:xsl CDATA #IMPLIED
  xmlns:fo CDATA #IMPLIED
  xmlns:xs CDATA #IMPLIED
  xmlns:fn CDATA #IMPLIED
  xmlns:xdt CDATA #IMPLIED
>
<!ELEMENT xsl:output EMPTY>
<!ATTLIST xsl:output
  version CDATA #IMPLIED
  indent CDATA #IMPLIED
  standalone CDATA #IMPLIED
  omit-xml-declaration CDATA #IMPLIED
  doctype-public CDATA #IMPLIED
  doctype-system CDATA #IMPLIED
  method CDATA #REQUIRED
  encoding CDATA #REQUIRED
  media-type CDATA #IMPLIED
>

<!ELEMENT xsl:template (#PCDATA|html)*>
<!ATTLIST xsl:template match CDATA #IMPLIED>
<!ELEMENT xsl:apply-templates EMPTY>

<!ELEMENT html (head,body)>
<!ELEMENT head (title)>
<!ELEMENT body (h1)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT h1 (xsl:apply-templates)?>
]>
<doc>
<xsl>
<xsl:stylesheet id="xstyle"
 version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="Windows-1251"
  omit-xml-declaration="yes"
  standalone="yes"
  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
  indent="yes"
  media-type="text-html" />

<xsl:template match="/doc/component/software">
<html><head><title>xxx</title></head><body>
<h1><xsl:apply-templates/></h1>
</body></html>
</xsl:template>

<xsl:template match="xsl:stylesheet"/>

</xsl:stylesheet>

</xsl>
<component>
<software>qqq</software>
</component>
</doc>
И, как теперь из этого всего получить вот это?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type"
      content="text/html; charset=Windows-1251" />
    <title>xxx</title>
  </head>
  <body>
    <h1>qqq</h1>
  </body>
</html>
Может я не так ссылку на внутренний XSL-шаблон сделал?

Кстати, сможет ли, в-принципе, какой-нибудь реальный XML-парсер-трансформер адекватно разжевать все это?
  • Вопрос задан
  • 3341 просмотр
Подписаться 7 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 3
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Кажется, поможет вот это: «Кроссбраузерные HTML инклуды».
Ответ написан
@egorinsk
Так а что XSLT-трансформатор пишет при попытке переварить файл?
Ответ написан
Комментировать
BedwaRe
@BedwaRe
Пиши код
Красава! Ахахаха! Тебе смешно, а у меня, на работе всё так и работает. Тебе смешно, а мне чет грустно даже стало :'(
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы