如何使用xslt在目标xml中添加DOCTYPE?

时间:2011-12-10 21:06:32

标签: xslt

我想将源xml完全传输到目标xml中,只需在目标xml中添加DOCTYPE。 我的源XMl是:

<?xml version="1.0" encoding="UTF-8" ?> 
 <ns0:mt_socreate_ob xmlns:ns0="http://socreate">
 <ZSPL00>
  <Empid>12</Empid> 
  <Firstname>latif</Firstname> 
  <Secondname>rahman</Secondname> 
  <Dept>tata</Dept> 
  </ZSPL00>
  </ns0:mt_socreate_ob>

目标XML应该是

<?xml version="1.0" encoding="UTF-8" ?> 

<!DOCTYPE ZSPL00 SYSTEM "sap2grips.dtd">

   <ns0:mt_socreate_ob xmlns:ns0="http://socreate">

    <ZSPL00>

     <Empid>12</Empid>

     <Firstname>latif</Firstname>

     <Secondname>rahman</Secondname>

      <Dept>tata</Dept>

  </ZSPL00>

  </ns0:mt_socreate_ob>

我正在编写以下xslt代码但未获得所需的结果

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="no" doctype-system="sap2grips.dtd"/>

<xsl:strip-space elements="*"/>

<!-- Default: copy everything -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

请更正我的代码以获得上述结果

1 个答案:

答案 0 :(得分:3)

任何符合要求的XSLT处理器都生成语义不正确的DOCTYPE声明,因为您想要的

你想:

<!DOCTYPE ZSPL00 SYSTEM "sap2grips.dtd"> 

这是错误的,因为ZSPL00不是XML文档顶部元素的名称(实际上是ns0:mt_socreate_ob

根据W3C XML specification

[28] doctypedecl   ::=   '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'

其中:

文档类型声明中的 Name 必须与根元素的元素类型匹配。”