gpt4 book ai didi

.net - 防止 XmlTextReader 扩展实体

转载 作者:数据小太阳 更新时间:2023-10-29 01:45:38 31 4
gpt4 key购买 nike

我试图在不扩展实体的情况下读取 XML 文档,对其进行一些操作,然后像最初一样使用未扩展的实体重新保存它。

当直接使用 XDocument 时,它加载失败,抛出异常告诉我它有未展开的实体:

XDocument doc = XDocument.Load(file);  // <--- Exception
// ... do some manipulation to doc
doc.Save(file2);

Exception: Reference to undeclared entity 'entityname'.

然后我尝试将 XmlTextReader 传递给 XDocument 构造函数,但是 EntityHandling 属性没有“不展开”:

XmlTextReader xmlReader = new XmlTextReader(file));
xmlReader.EntityHandling = EntityHandling.ExpandCharEntities;
XDocument doc = XDocument.Load(xmlReader);

此外,我查看了 XmlReader.Create 函数,但 MSDN 说:“通过 Create 方法创建的阅读器展开所有实体”。

如何创建一个不展开实体的 XmlReader,或者创建一个实体不展开的 XDocument?

最佳答案

以下对我有用。关键是使用反射来设置内部属性的值 DisableUndeclaredEntityCheck .

XmlDocument document = new XmlDocument();
XmlReaderSettings readerSettings = new XmlReaderSettings()
{
DtdProcessing = DtdProcessing.Ignore,
IgnoreWhitespace = true,
};
using (XmlReader reader = XmlReader.Create(inputPath, readerSettings))
{
PropertyInfo propertyInfo = reader.GetType().GetProperty("DisableUndeclaredEntityCheck", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
propertyInfo.SetValue(reader, true);
document.Load(reader);
}

关于.net - 防止 XmlTextReader 扩展实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3504227/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com