我最近建立了一个小的C#Windows窗体/ LINQ到XML的应用程序在VS2010这也正是它应该做的,除了一两件事:它增加了“[]”的DOCTYPE标签,这显然是造成文件被结束从遗留系统拒绝。 这里有一个前后:
之前
<!DOCTYPE ichicsr SYSTEM "http://www.accessdata.fda.gov/xml/icsr-xml-v2.1.dtd">
后
<!DOCTYPE ichicsr SYSTEM "http://www.accessdata.fda.gov/xml/icsr-xml-v2.1.dtd"[]>
该文件被保存使用.Save功能的程序中后这些字符得到补充。 该计划允许.xml文件的选择,然后选择“清除”,它通过去除某些标记,然后将其保存。 当过程开始时,文件没有“[]”中的DOCTYPE。 保存后,他们做的。 是否LINQ到XML添加这些?
有什么办法让从添加这些字符的程序?
显然,当XDocument
分析包含文档类型声明的XML文档,一个空的“内部子集”自动,如果一个不存在的插入。 (内部子集是由包围的部分[]
在<!DOCTYPE>
结果是格式良好的XML。 但是,如果你的遗留系统不能处理它,你可以通过设置除去从DTD内部子集XDocumentType.InternalSubset
属性为null
:
XDocument document = ...;
if (document.DocumentType != null)
document.DocumentType.InternalSubset = null;
如果你在Mono(如cod3monk3y)将案件处理这个像修改Info.plist中,你可以使用旧的XmlDocument类来解决的事情了,你使用的XDocument创建/修改XML文件后。
该代码假定你“的Info.plist”文件位于路径infoPlist:
using System;
using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
var xDocument = XDocument.Load (infoPlist);
// Do your manipulations here
xDocument.Save (infoPlist);
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load (infoPlist);
if (xmlDocument.DocumentType != null)
{
var name = xmlDocument.DocumentType.Name;
var publicId = xmlDocument.DocumentType.PublicId;
var systemId = xmlDocument.DocumentType.SystemId;
var parent = xmlDocument.DocumentType.ParentNode;
var documentTypeWithNullInternalSubset = xmlDocument.CreateDocumentType(name, publicId, systemId, null);
parent.ReplaceChild(documentTypeWithNullInternalSubset, xmlDocument.DocumentType);
}
xmlDocument.Save (infoPlist);