首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DTD TO C# -从DTD头中删除"[]“字符

DTD TO C# -从DTD头中删除"[]“字符
EN

Stack Overflow用户
提问于 2012-09-11 03:17:57
回答 2查看 2K关注 0票数 9

我最近用VS2010创建了一个小的C# windows forms/LINQ to XML应用程序,它做了它应该做的事情,除了一件事:它将"[]“添加到DOCTYPE标记的末尾,这显然会导致遗留系统中的文件被拒绝。下面是一个前后对比图:

在此之前

代码语言:javascript
复制
<!DOCTYPE ichicsr SYSTEM "http://www.accessdata.fda.gov/xml/icsr-xml-v2.1.dtd">

之后

代码语言:javascript
复制
<!DOCTYPE ichicsr SYSTEM "http://www.accessdata.fda.gov/xml/icsr-xml-v2.1.dtd"[]>

这些字符是在使用.Save函数将文件保存到程序中后添加的。该程序允许选择一个.xml文件,然后通过删除某些标签来“清理”它,然后保存它。当该过程开始时,文件在DOCTYPE中没有"[]“。在存钱之后,他们就会这么做。LINQ to XML是否添加了这些?

有什么方法可以阻止程序添加这些字符吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-11 03:38:32

显然,当XDocument解析包含文档类型声明的XML文档时,如果不存在“内部子集”,则会自动插入一个空的“内部子集”。(内部子集是<!DOCTYPE>中由[]包围的部分)。

结果就是格式良好的XML。但是,如果您的遗留系统无法处理它,您可以通过将XDocumentType.InternalSubset属性设置为null来从DTD中删除内部子集

代码语言:javascript
复制
XDocument document = ...;
if (document.DocumentType != null)
    document.DocumentType.InternalSubset = null;
票数 15
EN

Stack Overflow用户

发布于 2013-05-09 07:17:50

如果您在Mono (如cod3monk3y)上处理像修改Info.plist这样的情况,那么在使用XDocument创建/修改xml文件之后,您可以使用旧的XmlDocument类来修复问题。

该代码假定您的"Info.plist“文件位于路径infoPlist:

代码语言:javascript
复制
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);
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12358061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档