.NET:阻止 XmlDocument.LoadXml 检索 DTD

2024-02-08

我有以下代码(C#),它花费太长时间并且抛出异常:

new XmlDocument().
LoadXml("<?xml version='1.0' ?><!DOCTYPE note SYSTEM 'http://someserver/dtd'><note></note>");

我明白为什么它会这样做。我的问题是如何让它停止?我不关心 DTD 验证。我想我可以用正则表达式替换它,但我正在寻找更优雅的解决方案。

背景:
实际的 XML 是从一个不属于我的网站接收的。当站点正在进行维护时,它会返回带有 DOCTYPE 的 XML,该 DOCTYPE 指向维护期间不可用的 DTD。因此,我的服务变得不必要的缓慢,因为它尝试获取我需要解析的每个 XML 的 DTD。

这是异常堆栈:

Unhandled Exception: System.Net.WebException: The remote name could not be resolved: 'someserver'
at System.Net.HttpWebRequest.GetResponse()
at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials)
at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)
at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
at System.Xml.XmlTextReaderImpl.OpenStream(Uri uri)
at System.Xml.XmlTextReaderImpl.DtdParserProxy_PushExternalSubset(String systemId, String publicId)
at System.Xml.XmlTextReaderImpl.DtdParserProxy.System.Xml.IDtdParserAdapter.PushExternalSubset(String systemId, String publicId)
at System.Xml.DtdParser.ParseExternalSubset()
at System.Xml.DtdParser.ParseInDocumentDtd(Boolean saveInternalSubset)
at System.Xml.DtdParser.Parse(Boolean saveInternalSubset)
at System.Xml.XmlTextReaderImpl.DtdParserProxy.Parse(Boolean saveInternalSubset)
at System.Xml.XmlTextReaderImpl.ParseDoctypeDecl()
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)
at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
at System.Xml.XmlDocument.Load(XmlReader reader)
at System.Xml.XmlDocument.LoadXml(String xml)
at ConsoleApplication36.Program.Main(String[] args) in c:\Projects\temp\ConsoleApplication36\Program.cs:line 11

那么,在 .NET 4.0 中,XmlTextReader 有一个名为 DtdProcessing 的属性。当设置为 DtdProcessing.Ignore 时,它​​应该禁用 DTD 处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET:阻止 XmlDocument.LoadXml 检索 DTD 的相关文章

  • C# 模拟接口与模拟类

    我是 net 中的最小起订量框架的新手 根据我的在线研究 似乎有两种方法可以使用这个框架 要么模拟接口 要么模拟具体类 似乎在嘲笑具体类时 只有virtual方法可以被嘲笑 就我而言 我只想模拟实现接口的类的几个方法 例如 如果我们有以下内
  • 为什么 Roslyn 中有这么多对象池的实现?

    The 对象池 http source roslyn codeplex com Microsoft CodeAnalysis ObjectPool 25601 cs 20b9a041fb2d5b00是 Roslyn C 编译器中使用的一种类
  • 如何拦截 .Net 中第三方库对非虚拟方法的调用?

    我认为我需要的是 net 人们称之为 透明动态代理 的东西 但到目前为止我所看到的所有实现 Castle DynamicProxy Spring NET AOP 等 都要求我至少执行以下操作之一 将拦截的方法声明为虚拟方法 包装类并创建包装
  • 实体框架 - 循环更新属性

    我正在尝试找到一种方法来循环 EF 对象的属性并更新这些属性的值 更具体地说 我有 50 个字段 其中最多填充 50 个下拉列表 所有 50 个可能都需要填充 也可能不需要填充 为了解决这个问题 我有一个中继器 最多可以创建 50 个 DD
  • lambda 表达式是多线程的吗?

    lambda 表达式是多线程的吗 假设当你将数学公式编写为 lambda 方法时 当你将其传递给另一个方法时 它会是多线程的吗 不是100 清楚你问的是什么 您是否想问 lambda 是否自然地在不同的线程上运行 如果是这样 则它们只是 S
  • 使用 LINQ to SQL 的 .NET 架构的最佳设计实践(DAL 必要吗?我们真的可以使用 POCO吗?要采用的设计模式吗?)

    我避免在 net arch n 层架构上编写看起来像是另一个线程的内容 但请耐心等待 希望我和其他人一样 在选择用于企业应用程序的架构时 考虑到当今的趋势和新兴技术 仍然没有 100 满意或不清楚应采取的最佳方法 我想我正在寻求大众社区对方
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行
  • 依赖注入的惰性解析

    我有 net 课程 我使用 Unity 作为 IOC 来解决我们的依赖关系 它尝试在开始时加载所有依赖项 Unity中有没有一种方法 设置 允许在运行时加载依赖项 还有更好的解决方案 Unity 2 0 中对 Lazy 和 IEnumera
  • web.config 转换为

    我有针对多个环境的 web config 转换 在配置文件中 我有一个 applicationSettings 部分 其中包含多个设置和值对 我尝试过根据用于匹配名称的语法并更改连接字符串以匹配设置并更改值 但转换失败 这是可能吗 所以我的
  • 在工具栏下显示内容

    您好 我试图简单地将我的内容放在工具栏下方 但是当我运行我的应用程序时 某些内容本应位于工具栏下方 却隐藏在工具栏后面 我已经阅读了有关使用框架布局来尝试将其分离的内容 但我有点卡住了 我目前正在使用该软件提供的基本 android stu
  • 如何创建一个没有边框且只能通过手柄调整大小的 WPF 窗口?

    如果你设置ResizeMode CanResizeWithGrip 在 WPF 上Window然后右下角会出现一个调整大小的夹点 如下 如果你设置WindowStyle None 标题栏也会消失 但灰色斜边仍然保留 直到您设置ResizeM
  • 将 C# 代码转换为 F#(if 语句)

    我想知道如何转换此代码逐行从 C 到 F 我不想使用任何类型的 F 习惯用法或类似的东西 我想了解如何直接映射C 的构造到 F 这是 C 代码 requires l Length gt 0 int GetMinimumValue List
  • C# 证书生成框架

    有谁知道可以生成公钥 私钥 X 509 证书并签署这些证书的 C 框架 BouncyCastleCrypto 虽然这个名字很疯狂 但我很确定它具有所有这些功能 几乎所有 RFC 标准均已实施 当我几年前使用它时 它的文档记录很少 但是单元测
  • & 在 xml 文件中算作一个还是多个字符?

    我正在使用的 XML 模式具有特定的字符串字符长度 所以我可能有一个类似的字符串 Jim Mary 在 C 中是 10 个字符 但是当它写入 xml 时 它会变成 Jim amp Mary 如果 XML 模式规定字符串最多只能有 10 个字
  • EF数据库首先如何针对数据库更改更新模型?

    在班级图书馆Ado net Entity Data Model已生成 POCO 类 这些是第一次生成的 但数据库更改并未得到反映 在edmx图表右键单击并选择Update Model from Database显示新创建的表 但即使选择添加
  • 将 C# 字符串传递给非托管 C++ DLL

    我有一个简单的应用程序 它加载一个非托管 dll 并从 C 向它传递一些字符串值 但在 C dll 应用程序中 我收到异常 试图访问读 写保护的内存 我的 DLL 导入如下所示 DllImport X dll CallingConventi
  • Powershell XMLDocument保存为无BOM的UTF-8

    我构建了一个 System Xml XmlDocument 类型的 XML 对象 scheme gettype IsPublic IsSerial Name BaseType True False XmlDocument System Xm
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过

随机推荐

  • Backbone.js 链接文件到模型

    我正在使用 django 和backbone js 创建一个Web 应用程序 问题是我需要将文件上传到服务器 如何将主干模型与文件链接 因此 当我执行 model save 时 文件会上传到服务器 编辑 只是为了让事情变得清楚 我想做的是将
  • 在 Flutter 中使用 JsonSerialized 时如何识别动态键?

    让我们假设 直到最近 我才听到下面的声音Json response AA product id 111 type C 而且 我写了下面的内容 model dart从 json 转换为对象 模型 dart JsonSerializable c
  • 从 Groovy 中的闭包修改脚本变量

    我正在尝试从函数的闭包内部修改脚本变量 这个问题可以归结为 groovy transform Field int myField 0 incrementField assert myField 1 def incrementField 1
  • 调试断言失败 c >= -1 && c <= 255

    我很难理解我的代码的运行时错误 这是我的班级作业 我认为很容易 但发生了一些奇怪的事情 我在下面发布了我的代码 这个作业的提示是创建一个程序 要求用户输入一些单词 然后它应该输出有多少个单词 我有一个朋友运行了该程序并且它有效 但是 每当我
  • 使用 Karma Runner 生成 jasmine 报告

    我想获得所有成功的茉莉花规格与业力运行的报告 就像您单独使用茉莉花时获得的那样 有办法实现这个目标吗 试试我写的这个快速插件 https github com dtabuenc karma html reporter https githu
  • jQuery 父元素内部 HTML

    我通过以下方式获取元素的内部 HTML this context innerHTML 然后我得到父内部 HTML this parent context innerHTML 但这段代码返回相同的值 任何想法有什么问题吗 要获取元素的内容 则
  • CMake 顶级 Xcode 项目属性

    我使用 Cmake 和 Xcode 来生成一个 c c 项目 my project 和一些 c c 目标 一个是二进制文件 其余的是库 我的 CMakeLists txt 看起来像这样 project my project add subd
  • 在多个列表段落上循环 Word 宏会导致内存问题

    我遇到了一个相当简单的 Microsoft Word vba 宏问题 该宏旨在解决当我们从 Word 文档创建 PDF 版本时我们在列表缩进中遇到的一些问题 该宏基本上循环遍历文档中的每个列表 并且对于与列表关联的每个列表段落 它设置列表模
  • 页面必须填满整个ViewPager2(使用match_parent)

    我有一个项目布局 其中显示图像 产品名称和产品图像 我必须使用约束布局以 1 1 5 比例显示图像 但是当我加载小图像时 下面的文本不显示 下面是我的项目 XML 代码
  • 将图像拖放到网页中并使用 HTML 文件 API 自动调整图像大小

    我想创建网页 允许用户将图像拖放到页面各个部分的框中 以便他们可以打印带有图像的页面 我希望图像在放入框中时自动调整大小 我结合了一些代码http html5demos com file api http html5demos com fi
  • Git Bash for Windows 显示/期望带有正斜杠的文件路径,没有驱动器冒号

    我安装了 Git 扩展 它会自动下载并安装适用于 Windows 的 Git 当我使用 Git Bash 时 它显示文件路径为 c whatever folder 而不是 C whatever folder 如果我粘贴来自 Windows
  • 如何将 rst.FindFirst 与 rst.NoMatch 一起使用?

    我的代码除了这一行之外都有效 FindFirst DONOR CONTACT ID strTemp2 我希望我的代码检查是否存在一条记录 其中存在特定的 DONOR CONTACT ID 因为存在多个具有相同 DONOR CONTACT I
  • 性能问题:ON DUPLICATE KEY UPDATE 与 UPDATE (MySQL)

    INSERT INTO ON DUPLICATE KEY UPDATE 和 UPDATE 之间有性能差异吗 如果我知道可以更新的值 我应该使用更新还是它并不重要 它们是有区别的 The INSERT查询必须检查每一列的约束 以查看添加该行是
  • 将字符串转换为json字符串并在R中解析

    我有一个数据 其中一列为 json 字符串 reservation reasons 1592 name gt jorge value gt MX name gt Billing phone number value gt 1123 name
  • d3.js 右对齐嵌套条形图

    我正在与这个 d3 js 示例 http bl ocks org mbostock 1283663我希望将图表的整个方向更改为从右到左 我能够反转 x 轴刻度 var x d3 scale linear range width 0 以及 y
  • 在 Python 中打印不带换行符(但带空格)的列表

    我正在尝试使用打印不带换行符的列表的值sys stdout write 它工作得很好 但唯一的问题是我想将每个值与另一个值隔开 换句话说 而不是123 我想1 2 3 我在网站上寻找解决方案 但没有找到涉及列表的内容 当我添加 to sys
  • multiDexEnabled 不起作用

    我有一个相当大的android项目 该项目仍然可以编译 但是当我尝试编译测试时出现错误 Execution failed for task app dexDebugTest trouble writing output Too many m
  • Ruby 中的“if (a == b || c == b)”语句可以做得更短吗

    我有一段 Ruby 代码 如下所示 def check if a b c b execute some code b the same variable end end 这可以写成这样 def check if a c b this doe
  • 预期的 ';'在声明末尾 /vector /c++

    当我尝试初始化一个vector of ints 我总是收到此错误 预期的 在声明结束时 我使用了 C Primer 中的原始代码 vector
  • .NET:阻止 XmlDocument.LoadXml 检索 DTD

    我有以下代码 C 它花费太长时间并且抛出异常 new XmlDocument LoadXml