我在开头有一些带有以下DOCTYPE声明的xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE setup SYSTEM "setup.dtd">
我的代码或多或少地处理xml:
XDocument doc = XDocument.Load(path);
doc.Element("foo")
.Element("bar")
.Elements()
.Attributes()
.Where(x => x.Name == "some" && x.Value == some)
.Single()
.Parent
.SetValue(newValue);
doc.Save(path);
代码更改其结构中某个xml节点的值。令人惊讶的是它也影响了DOCTYPE,并且在操作之后它看起来像:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE setup SYSTEM "setup.dtd"[]>
为什么会这样做?
答案 0 :(得分:2)
这是因为InternalSubset
的{{1}}属性设置为空字符串。当这被传递给基础DocumentType
方法时,它会添加一个内部子集声明的空集合。
这仍然有效,但您可以通过将XmlWriter.WriteDocType
值设置为InternalSubset
来阻止此操作:
null