Вы можете легко добавить DOCTYPE к документу XML на этапе предварительной обработки, например, :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"
doctype-system=
"http://www.editeur.org/onix/2.1/reference/onix-international.dtd"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
, когда это преобразование применяется к документу XML безDOCTYPE (в данном случае предоставленный XML-документ, из которого был удален DOCTYPE):
<ONIXmessage release="2.1">
<header>
<m174>Some Publisher</m174>
<m182>20090622</m182>
</header>
<product>
<a001>160258186X</a001>
<a002>03</a002>
<productidentifier>
<b221>15</b221>
<b244>9781602581869</b244>
</productidentifier>
<b246>02</b246>
<b012>BB</b012>
<title>
<b202>01</b202>
<b203>The Acts of the Apostles</b203>
<b030>The</b030>
<b031>Acts of the Apostles</b031>
<b029>Four Centuries of Baptist Interpretation</b029>
</title>
</product>
</ONIXmessage>
результат - тот же XML-документ, но с правильно добавленным DOCTYPE :
<!DOCTYPE ONIXmessage
SYSTEM "http://www.editeur.org/onix/2.1/reference/onix-international.dtd">
<ONIXmessage release="2.1">
<header>
<m174>Some Publisher</m174>
<m182>20090622</m182>
</header>
<product>
<a001>160258186X</a001>
<a002>03</a002>
<productidentifier>
<b221>15</b221>
<b244>9781602581869</b244>
</productidentifier>
<b246>02</b246>
<b012>BB</b012>
<title>
<b202>01</b202>
<b203>The Acts of the Apostles</b203>
<b030>The</b030>
<b031>Acts of the Apostles</b031>
<b029>Four Centuries of Baptist Interpretation</b029>
</title>
</product>
</ONIXmessage>
Теперь вы можете успешно применить преобразование к результату этапа предварительной обработки.