Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net XmlDocument.LoadXml()挂起几分钟_.net_Xml_Vb.net_Xmldocument - Fatal编程技术网

.net XmlDocument.LoadXml()挂起几分钟

.net XmlDocument.LoadXml()挂起几分钟,.net,xml,vb.net,xmldocument,.net,Xml,Vb.net,Xmldocument,我有一个从HTTP请求解析XML响应的例程,我使用XmlDocument.LoadXml来帮助实现这一点。我指望这个方法在坏XML上抛出异常,并在成功时返回加载的XmlDocument对象 我没想到的是,它在加载文档时会挂起几分钟。当我在测试环境中运行此代码时,它会100%挂起几分钟。在我看来是.NET中的一些错误 Dim tstring As String = "" tstring &= "" & vbCrLf tstring &= "" &a

我有一个从HTTP请求解析XML响应的例程,我使用XmlDocument.LoadXml来帮助实现这一点。我指望这个方法在坏XML上抛出异常,并在成功时返回加载的XmlDocument对象

我没想到的是,它在加载文档时会挂起几分钟。当我在测试环境中运行此代码时,它会100%挂起几分钟。在我看来是.NET中的一些错误

    Dim tstring As String = ""

    tstring &= "" & vbCrLf
    tstring &= "" & vbCrLf
    tstring &= "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">" & vbCrLf
    tstring &= "" & vbCrLf
    tstring &= "<html> xmlns=""http://www.w3.org/1999/xhtml"" >" & vbCrLf
    tstring &= "<head><title>" & vbCrLf
    tstring &= "    Error" & vbCrLf
    tstring &= "</title></head>" & vbCrLf
    tstring &= "<body>" & vbCrLf
    tstring &= "</body>" & vbCrLf
    tstring &= "</html>" & vbCrLf

    Dim MyXmlDoc As New XmlDocument
    MyXmlDoc.LoadXml(tstring)
Dim tstring As String=“”
t字符串&=“”&vbCrLf
t字符串&=“”&vbCrLf
t字符串&=“”&vbCrLf
t字符串&=“”&vbCrLf
t字符串&=“xmlns=”“http://www.w3.org/1999/xhtml“”>“&vbCrLf
t字符串&=“”&vbCrLf
t字符串&=“错误”&vbCrLf
t字符串&=“”&vbCrLf
t字符串&=“”&vbCrLf
t字符串&=“”&vbCrLf
t字符串&=“”&vbCrLf
将MyXmlDoc设置为新的XmlDocument
MyXmlDoc.LoadXml(tstring)
文档中可以删除以防止其挂起的特定行是:

    tstring &= "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">" & vbCrLf
t字符串&=“”&vbCrLf

我是否必须搜索“loadxml调用正在解析doctype以进行验证,因此它必须获取该url-在这种情况下速度很慢。您可以在浏览器中进行测试

另一个问题-引述如下:

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

doc.xmlsolver=null


对于.NET 3.5应该可以工作。

是的,我想知道。我查看了.NET 3.5对象,想找到一种关闭抓取的方法,因为我认为这可能是问题所在,但没有问题。对于vb.NET和3.5 MyXmlDoc.XmlResolver=Nothing,这是W3C关于这个问题的有趣背景:您看到通过XEleme使用LINQ到XML的相同性能吗nt.Load(uri)或XDocument.Parse(tstring)?另外,为了将来的参考,请尝试使用StringBuilder而不是过度的连接来构建字符串。Jim,为了简化问题的解释,我在这里避免使用字符串生成器。显然,我的代码与此完全不同,因为XML是从HTTP请求读取的。