XML转换后保留DTD
问题描述:
我正在转换一个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();
}
任何想法?
答
为了保持XML声明,你需要确保你的XmlWriterSettings
该OmitXmlDeclaration
设置为false
:
var settings = new XmlWriterSettings
{
Indent = true,
IndentChars = "\t",
ConformanceLevel = ConformanceLevel.Auto,
Encoding = Encoding.UTF8,
OmitXmlDeclaration = false,
};
至于DTD“径自走开” - 因为你正在改变的文件,您应该向转换后的文档添加一个新的DTD声明。
没有xsl
和xml
文件,很难确定。你能编辑你的问题并添加它们吗?
答
嘿谢谢你的回复。我做了
writer.WriteDocType(mydoc.DocumentType.Name, mydoc.DocumentType.PublicId, mydoc.DocumentType.SystemId, mydoc.DocumentType.InternalSubset);
它工作。是的,我也有
OmitXmlDeclaration = false,
感谢