Как добавить DOCTYPE в целевой XML с помощью xslt? - PullRequest
0 голосов
/ 11 декабря 2011

Я хочу передать именно исходный xml в целевой xml только с добавлением DOCTYPE в целевой xml. Мой источник 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 Ответ

3 голосов
/ 11 декабря 2011

Любой соответствующий XSLT-процессор не сгенерирует семантически неверное DOCTYPE объявление, так как вы хотите .

Вы хотите:

<!DOCTYPE ZSPL00 SYSTEM "sap2grips.dtd"> 

и это неверно, потому что ZSPL00 не является именем верхнего элемента документа XML (который на самом деле ns0:mt_socreate_ob)

Согласно XML W3Cспецификация :

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

где:

" * Name в объявлении типа документа ДОЛЖНО соответствовать типу элементакорневой элемент . "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...