2010-05-07 69 views
0

我正在转换一个XML文档,但在转换后,我的DTD消失了,并且第一行告诉XML版本丢失。XML转换后保留DTD

<?xml version="1.0"?> 

我使用转换XML文件中的代码是:

// Load the style sheet. 
      var xslt = new XslCompiledTransform(); 
      xslt.Load("XSLTFile1.xslt"); 

      // Create the writer. 
      var settings = new XmlWriterSettings 
          { 
           Indent = true, 
           IndentChars = "\t", 
           ConformanceLevel = ConformanceLevel.Auto, 
           Encoding = Encoding.UTF8, 
          }; 

      var mydoc = XDocument.Load("Doc1.xml"); 

      var writer = XmlWriter.Create("Doc2.xml", settings); 

      // Execute the transform and output the results to a file. 
      if (writer != null) 
      { 
       xslt.Transform(mydoc.CreateReader(), writer); 
       writer.Close(); 
      } 

任何想法?

回答

0

为了保持XML声明,你需要确保你的XmlWriterSettingsOmitXmlDeclaration设置为false

var settings = new XmlWriterSettings 
        { 
        Indent = true, 
        IndentChars = "\t", 
        ConformanceLevel = ConformanceLevel.Auto, 
        Encoding = Encoding.UTF8, 
        OmitXmlDeclaration = false, 
        }; 

至于DTD“径自走开” - 因为你正在改变的文件,您应该向转换后的文档添加一个新的DTD声明。

没有xslxml文件,很难确定。你能编辑你的问题并添加它们吗?

0

嘿谢谢你的回复。我做了

writer.WriteDocType(mydoc.DocumentType.Name, mydoc.DocumentType.PublicId, mydoc.DocumentType.SystemId, mydoc.DocumentType.InternalSubset); 

它工作。是的,我也有

OmitXmlDeclaration = false, 

感谢