LINQ to XML XDocument在保存时更改DOCTYPE

时间:2015-07-01 08:31:06

标签: c# xml linq-to-xml

我在开头有一些带有以下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"[]>

为什么会这样做?

1 个答案:

答案 0 :(得分:2)

这是因为InternalSubset的{​​{1}}属性设置为空字符串。当这被传递给基础DocumentType方法时,它会添加一个内部子集声明的空集合。

这仍然有效,但您可以通过将XmlWriter.WriteDocType值设置为InternalSubset来阻止此操作:

null