试图解析xml,但xmldocument.loadxml()正试图下载?

时间:2010-03-17 22:46:29

标签: c# xml parsing

我有一个字符串输入,我不知道是否有效xml。

我认为最简单的方法是包装

new XmlDocument().LoadXml(strINPUT);

在try / catch中。

我面临的问题是,如果此文件的标题包含

,有时strINPUT是一个html文件
<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">
<html xml:lang=""en-GB"" xmlns=""http://www.w3.org/1999/xhtml"" lang=""en-GB"">

...像许多人一样,它实际上试图建立与w3.org网址的连接,我真的不想这样做。

任何人都知道是否可以解析字符串而不试图聪明并检查外部网址?如果做错了,可以选择xmldocument吗?

3 个答案:

答案 0 :(得分:6)

尝试以下方法:

XmlDocument doc = new XmlDocument();
using (var reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings() {
    ProhibitDtd = true,
    ValidationType = ValidationType.None
})) {
    doc.Load(reader);
}

该代码创建了一个关闭DTD处理和验证的阅读器。检查身体状况仍然适用。

如果您可以切换到使用XDocument而不是XDocument.Parse,则可以使用XmlDocument

答案 1 :(得分:2)

我不确定问题背后的原因,但您是否尝过XDocument

中的XElementSystem.Xml.Linq课程
 XDocument document = XDocument.Load(strINPUT , LoadOptions.None);
 XElement element = XElement.Load(strINPUT );

编辑,对于xml,string请尝试按照

XDocument document = XDocument.Parse(strINPUT , LoadOptions.None );

答案 2 :(得分:1)

使用XmlDocument的加载方法加载xml文档,使用XmlNodeList获取元素,然后检索数据...... 尝试以下方法:

XmlDocument xmlDoc = new XmlDocument();
//use the load method to load the XML document from the specified stream.
xmlDoc.Load("myXMLDoc.xml");
//Use the method GetElementsByTagName() to get elements that match the specified name.
XmlNodeList item = xDoc.GetElementsByTagName("item");
XmlNodeList url = xDoc.GetElementsByTagName("url"); 
Console.WriteLine("The item is: " + item[0].InnerText));

在上面的代码周围添加一个try / catch块,看看你抓到了什么,修改你的代码来解决这种情况。